【发布时间】:2020-03-30 03:22:39
【问题描述】:
在使用 jackson 反序列化和序列化 java DTO 时遇到了一个奇怪的行为。 考虑这个示例 java dto,
public class TempClz {
private List<String> field1;
public List<String> getField1() {
return field1;
}
public void setField1(List<String> field1) {
this.field1 = field1;
}
public List<String> getNotAtAll() {
return field1;
}
}
现在在创建这个类的一个对象并将 field1 设置为某个值并通过标准杰克逊映射器对其进行序列化时,获得的示例 json 字符串是
{"field1":["123"],"notAtAll":["123"]}
这种行为很奇怪,我在文档中没有得到直接的解释,但是一旦创建了 getter,该属性就可用于序列化和反序列化。这使用生成的 json 响应中的函数名称创建了一个属性。
但再次将此字符串反序列化为 pojo 时,notAtAll 列表被附加到 field1 列表中,即在生成的 java 对象中,field1 的大小为 2,其值为 ["123","123"],这似乎是错误的。在 getter 上使用 jsonIgnore 修复了此行为,但有人可以帮助准确解释此行为以及这是否是有意的吗?
【问题讨论】: