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

Java 使用@JsonProperty时是否需要使用@JsonCreator?,java,jackson,Java,Jackson,我在构造函数的参数上使用Jackson@JsonProperty(name)注释,我遇到的每个文档都指出,我们必须将@JsonCreator注释与@JsonProperty一起使用才能正常工作,但即使没有@JsonCreator注释,我的代码也可以正常工作那么@JsonCreator有什么用呢 publictestclass(@JsonProperty(“name”)映射数据){ this.name=名称; } 公共映射getName(){ 返回名称; } 即使没有@JsonCreator注释

我在构造函数的参数上使用Jackson@JsonProperty(name)注释,我遇到的每个文档都指出,我们必须将@JsonCreator注释与@JsonProperty一起使用才能正常工作,但即使没有@JsonCreator注释,我的代码也可以正常工作那么@JsonCreator有什么用呢

publictestclass(@JsonProperty(“name”)映射数据){
this.name=名称;
}
公共映射getName(){
返回名称;
}

即使没有@JsonCreator注释,上述代码也可以正常工作。

Jackson必须知道从JSON对象向构造函数传递字段的顺序。因为您有一个单参数构造函数,所以创建时不需要
@JsonCreator

来自javadoc

可用于定义构造函数和工厂的标记注释 方法作为用于实例化的新实例的方法 关联类

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

不带JsonProperty的单参数构造函数/工厂方法 参数注释:如果是,这就是所谓的“委托” 在这种情况下,Jackson首先将JSON绑定到 参数,然后调用creator构造函数/工厂方法,其中 每个参数都用JsonProperty或JacksonInject注释, 指示要绑定到的属性的名称


杰克逊的更新版本也考虑了所有参数都具有显式<代码> @ JSONNICS 的情况,以消除需要单独的<代码> @ JSONCRORKER < /COD>。 可能是Javadocs没有更新来解释这种特殊情况

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

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

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