Java 无属性getter的Jackson反序列化行为

Java 无属性getter的Jackson反序列化行为,java,jackson,Java,Jackson,在使用jackson对java DTO进行反序列化和序列化时,遇到了一种奇怪的行为。 考虑这个示例java dto,< /p> public class TempClz { private List<String> field1; public List<String> getField1() { return field1; } public void setField1(List<String> fie

在使用jackson对java DTO进行反序列化和序列化时,遇到了一种奇怪的行为。 考虑这个示例java dto,< /p>
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;
    }
}
这种行为很奇怪,我在文档中没有得到对此的直接解释,但一旦创建了getter,该属性就可以用于序列化和反序列化。这将使用结果json响应中的函数名创建属性


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

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

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