Jackson 还需要 getter 方法来使用 @JsonCreator 正确序列化 bean 属性
Posted
技术标签:
【中文标题】Jackson 还需要 getter 方法来使用 @JsonCreator 正确序列化 bean 属性【英文标题】:Jackson also needs getter methods to correctly serialize a bean property using @JsonCreator 【发布时间】:2018-09-22 20:33:01 【问题描述】:我在使用 Spring Boot 1.5 的应用程序中使用 Jackson 将一些 bean 序列化为 JSON。
我注意到要正确使用@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,
Jackson 不会序列化相关的属性。为什么 Jackson 还需要 getter 方法?
【问题讨论】:
【参考方案1】:Jackson 使用反射来访问私有和受保护的属性。
删除 getter 后,Jackson 不知道如何序列化/反序列化属性(=您的私有字段)。
构造函数使用的 @JsonProperty
注释不会帮助 Jackson 在编译时找到属性,因为您的构造函数将在运行时使用。
不直观的是,getter 还使私有字段也可反序列化 - 因为一旦它具有 getter,该字段就被视为属性。
Paraschiv, Eugen - "Jackson – Decide What Fields Get Serialized/Deserialized"
【讨论】:
以上是关于Jackson 还需要 getter 方法来使用 @JsonCreator 正确序列化 bean 属性的主要内容,如果未能解决你的问题,请参考以下文章