我对 JSON 很陌生,我环顾四周试图弄清楚该怎么做,但不确定我是否完全理解。我正在进行外部 API 调用,返回:
2015-12-21 01:22:09 INFO RiotURLSender:60 - Total json:
{"USERNAME":{"profileIconId":984,"revisionDate":1450655430000,"name":"USERNAME2","id":38584682,"summonerLevel":30}}
其中“USERNAME”(以及 USERNAME2 - 可能与 USERNAME 略有不同)将根据您传递的调用参数的内容而有所不同。我使用 Jackson Object Mapper 来映射 USERNAME 对象中的各个值 - 但没有意识到我也必须映射该对象。
我一直在 DTO 中使用注释,例如:
@JsonProperty("profileIconId")
private Long profileIconId;
并使用以下方式进行映射:
summonerRankedInfoDTO = mapper.readValue(jsonString, SummonerRankedInfoDTO.class);
如何使用每次都会更改的 USERNAME 值进行映射?
这似乎有点奇怪,使用实际不同的键而不是仅具有相同的键和不同的值是不好的做法吗?
谢谢
最佳答案
您可以使用下面提到的注释@JsonAnyGetter和@JsonAnySetter。 将此代码添加到您的域类中。因此,在序列化和反序列化对象时,任何非映射属性都将填充到“nonMappedAttributes”映射中。
@JsonIgnore
protected Map<String, Object> nonMappedAttributes;
@JsonAnyGetter
public Map<String, Object> getNonMappedAttributes() {
return nonMappedAttributes;
}
@JsonAnySetter
public void setNonMappedAttributes(String key, Object value) {
if (nonMappedAttributes == null) {
nonMappedAttributes = new HashMap<String, Object>();
}
if (key != null) {
if (value != null) {
nonMappedAttributes.put(key, value);
} else {
nonMappedAttributes.remove(key);
}
}
}
关于java - 使用不同的对象名称映射 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34388198/