ric*_*din 4 java json jackson spring-boot spring-restcontroller
我在使用 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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我删除方法getName并且getAge,Jackson 没有序列化相关的属性。为什么 Jackson 还需要 getter 方法?
Jackson 使用反射来访问私有和受保护的属性。一旦您删除了 getter,Jackson 就不知道如何序列化/反序列化属性(=您的私有字段)。@JsonProperty构造函数的使用注释不会帮助 Jackson 在编译时找到属性,因为您的构造函数将在运行时使用。
不直观的是,getter 也使私有字段可反序列化——因为一旦有了 getter,该字段就被认为是一个属性。
Paraschiv, Eugen - “Jackson – 决定哪些字段被序列化/反序列化”
| 归档时间: |
|
| 查看次数: |
1580 次 |
| 最近记录: |