使用@JsonProperty时是否需要使用@JsonCreator?

时间:2016-11-28 12:04:11

标签: java jackson

我在构造函数的参数上使用Jackson @JsonProperty(name)注释,我遇到的每个文档都指出我们必须使用 @JsonCreator 注释< em> @JsonProperty 让它正常工作但即使没有 @JsonCreator 注释,我的代码也能正常工作那么 @JsonCreator的用途是什么

public TestClass(@JsonProperty("name") Map<String, String> data) {
    this.name = name;
}

public Map<String, String> getName() {
    return name;
}

即使没有@JsonCreator Annotation,上面的代码也能正常工作。

2 个答案:

答案 0 :(得分:5)

Jackson必须知道将JSON对象中的字段传递给构造函数的顺序。因为您有一个参数构造函数,所以创建无需@JsonCreator

来自javadoc

  

标记注释,可用于定义构造函数和工厂   方法作为一个用于实例化新实例的方法   相关课程。

     

注意:在注释创建者方法(构造函数,工厂方法)时,   方法必须是:

     

没有JsonProperty的单参数构造函数/工厂方法   参数的注释:如果是这样,这就是所谓的“委托”   创造者“,在这种情况下杰克逊首先将JSON绑定为类型   参数,然后调用creator构造函数/工厂方法在哪里   每个参数都用JsonProperty或JacksonInject注释,   指示要绑定到的属性的名称

答案 1 :(得分:3)

较新版本的Jackson也会考虑所有参数都具有明确@JsonProperty的情况,以消除对单独@JsonCreator的需求。 情况可能是Javadocs尚未更新以解释这一特殊情况。

请注意,单个String / int / long / boolean参数的特殊情况略有不同,因为虽然也会检测到{{1}构造函数),它是“委托”创建者,只有在整个传入值匹配JSON类型(分别为JSON字符串,数字或布尔值)时才匹配。