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