我在构造函数的参数上使用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,上面的代码也能正常工作。
答案 0 :(得分:5)
Jackson必须知道将JSON对象中的字段传递给构造函数的顺序。因为您有一个参数构造函数,所以创建无需@JsonCreator
来自javadoc
标记注释,可用于定义构造函数和工厂 方法作为一个用于实例化新实例的方法 相关课程。
注意:在注释创建者方法(构造函数,工厂方法)时, 方法必须是:
没有JsonProperty的单参数构造函数/工厂方法 参数的注释:如果是这样,这就是所谓的“委托” 创造者“,在这种情况下杰克逊首先将JSON绑定为类型 参数,然后调用creator构造函数/工厂方法在哪里 每个参数都用JsonProperty或JacksonInject注释, 指示要绑定到的属性的名称
答案 1 :(得分:3)
较新版本的Jackson也会考虑所有参数都具有明确@JsonProperty
的情况,以消除对单独@JsonCreator
的需求。
情况可能是Javadocs尚未更新以解释这一特殊情况。
请注意,单个String
/ int
/ long
/ boolean
参数的特殊情况略有不同,因为虽然也会检测到{{1}构造函数),它是“委托”创建者,只有在整个传入值匹配JSON类型(分别为JSON字符串,数字或布尔值)时才匹配。