gpt4 book ai didi

java - Jackson 没有属性的 getter 反序列化行为

转载 作者:行者123 更新时间:2023-12-01 19:38:29 25 4
gpt4 key购买 nike

在使用 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 设置为某个值,并通过标准 jackson 映射器对其进行序列化,获得的示例 json 字符串为

{"field1":["123"],"notAtAll":["123"]}

这种行为很奇怪,我没有在文档中得到对此的直接解释,但是一旦创建了 getter,该属性就可用于序列化和反序列化。这使用生成的 json 响应中的函数名称创建了一个属性。

但是再次将此字符串反序列化为 pojo 时,notAtAll 列表被附加到 field1 列表,即在生成的 java 对象中,field1 的大小为 2,值为 ["123","123"] 这似乎是错误的。在 getter 上使用 jsonIgnore 修复了此行为,但有人可以帮助准确解释此行为以及这是否是有意的吗?

最佳答案

Getter 使非公共(public)字段可序列化和反序列化。因此,毫无疑问,它在 json 中为 getNotAtAll 方法添加了 notAtAll 字段。当您反序列化相同的字符串时,它具有来自两个 getter 的值,但它们都返回相同的字段,即 field1。因此,这些值将添加到您的列表中。您正确地使用了 @JsonIgnore 来忽略此 getter。

关于java - Jackson 没有属性的 getter 反序列化行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59191010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com