我正在使用Jackson将一些bean序列化为JSON,在使用Spring Boot 1.5的应用程序中。
我注意到要正确使用@JsonCreator
序列化bean,我必须为每个属性声明getter方法,加上@JsonProperty
注释。
public class Person {
private final String name;
private final int age;
@JsonCreator
public Person(@JsonProperty("name") String name,
@JsonProperty("age") int age) {
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
}
如果我删除方法getName
和getAge,
杰克逊没有序列化相关属性。杰克逊为什么还需要吸气方法?
答案 0 :(得分:2)
杰克逊使用反射访问私有和受保护的属性。
一旦删除了getter,Jackson就不知道如何序列化/反序列化属性(=您的私有字段)。
使用的@JsonProperty
注释构造函数不会帮助Jackson在编译时找到属性,因为构造函数将在运行时使用。
不直观地,getter也使私有字段也可以反序列化 - 因为一旦它有一个getter,该字段就被认为是一个属性。
Paraschiv,Eugen - "Jackson – Decide What Fields Get Serialized/Deserialized"