java - 当 json 属性名称根据请求更改时使用 restTemplate getForObject
问题描述
我想使用 restTemplate.getForObject 方法,并且当所有请求的响应 JSON 键都相同时,我已经让它工作了。然后我使用了@JsonProperty 注释,一切正常。
但是现在我有一个响应,它始终具有相同的结构,但 JSON 密钥的名称之一会根据我正在执行的请求而更改。
例子
response 1:
{
"entities": {
"ID_1": { ... }
}
}
response 2:
{
"entities": {
"ID_2": { ... }
}
}
由于 ID_1 和 ID_2 的名称不同,我相信我不能使用 @JsonProperty 注释。
所以我的问题是我是否需要更改我正在使用的方法,或者我将如何创建映射到请求的 DataClass。我知道我可以手动将 JSON 响应映射到一个对象,但这感觉没有必要吗?
DataClass 结果 = restTemplate.getForObject(url, DataClass.class);
解决方案
您可以使用JsonAnySetter
JsonAnyGetter
映射,在以下示例中,additionalProperties 收集所有“非映射”属性:
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Example {
@JsonProperty("foo")
private String foo;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
推荐阅读
- identityserver4 - 为什么 Identity Server GetLogoutContextAsync() 方法总是为 PostLogoutRedirectUri 返回 null?
- bash - 删除 bash 中的名称中间
- python - 字典中的加法/列表
- django - Django原子事务实际上不是原子的?
- sql - 使用 SQL 和 R 从 power BI pbix 文件中提取数据
- sql-server - 无法通过查询选择表,即使它完全可用
- python - Python - Glob 递归地挖掘目录
- apache-kafka - 卡夫卡流。在窗口宽限期关闭后获取每个键的按时间排序的事件流
- node.js - AWS Lambda Node.js 12.x 强制退出
- php - Prestashop 变量 - 类别页面