【发布时间】:2021-04-02 19:10:55
【问题描述】:
我的 DTO 类具有预定义的字段和未映射的映射。当 otherFields 映射包含具有相同名称(field1 键)的字段时,杰克逊将它们都序列化,并且我有无效的 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;
}
}
在这种情况下有没有办法只选择一个值?对于我的情况,地图中的一个应该优先。
【问题讨论】:
-
要实现这一点,您应该为您的 DTO 类实现 JsonSerializer,在 serialize 方法中编写您的逻辑
-
@AbhisekLamsal 还有其他复杂的选择吗?我的班级有很多具有相同问题的字段和嵌套对象
-
我怀疑是否有任何其他方法可以解决您的特定问题。另一种选择是在所有字段中添加 JsonIgnore 并修改 getter 和 setter,以便您从 getter 中的映射返回值并在所有 setter 中向映射添加值。无论哪种方式,您都必须在此处自定义所有类
标签: java spring jackson jackson-databind