带有@JsonAnyGetter的java序列化重复字段
我有一个DTO类,其中包含预定义的字段和非映射的映射。当otherFields映射包含具有相同名称(field1键)的字段时,jackson会序列化这两个字段,我有无效的json
{
"field1": "value",
"field1": "otherValue"
}
public class DTO implements Serializable {
private String field1;
@JsonIgnore
@JsonAnySetter
private final Map<String, Object> otherFields = new LinkedHashMap<>();
@JsonAnyGetter
public Map<String, Object> getOtherFields() {
return otherFields;
}
public String getField1() {
return field1;
}
public void setField1(String field1) {
this.field1 = field1;
}
}
在这种情况下,有没有办法只选择一个值?对于我的情况,地图上的一个应该有优先权
# 1 楼答案
我建议的最简单的解决方案是忽略属性,并在由
JsonAnyGetter
注释标记的getter
中添加额外的逻辑来检查此条件:它很简单,但是通过修改}来中断
otherFields
{getter
。我们可以通过添加一个经典的getter
和一个Jackson
来改进它: