Jackson还需要使用@JsonCreator正确序列化bean属性的getter方法

时间:2018-04-12 15:43:56

标签: java json spring-boot jackson spring-restcontroller

我正在使用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;
    }
}

如果我删除方法getNamegetAge,杰克逊没有序列化相关属性。杰克逊为什么还需要吸气方法?

1 个答案:

答案 0 :(得分:2)

杰克逊使用反射访问私有和受保护的属性。 一旦删除了getter,Jackson就不知道如何序列化/反序列化属性(=您的私有字段)。 使用的@JsonProperty注释构造函数不会帮助Jackson在编译时找到属性,因为构造函数将在运行时使用。

  

不直观地,getter也使私有字段也可以反序列化 - 因为一旦它有一个getter,该字段就被认为是一个属性。

Paraschiv,Eugen - "Jackson – Decide What Fields Get Serialized/Deserialized"