Java Jackson无法识别@JsonCreator注释

Java Jackson无法识别@JsonCreator注释,java,ajax,json,annotations,jackson,Java,Ajax,Json,Annotations,Jackson,我目前正在使用Jackson 1.4.2,并尝试反序列化从UI传递回Java控制器(servlet)的code值(类型信息的唯一标识符) 有多种类型(例如,ABCType,XYZType,等等)都是从abstractype扩展而来的,但每个具体类型都有一个静态工厂方法,该方法作为单个参数、唯一标识符,并返回类型对象(名称、关联类型、描述、有效首字母缩写等)由该标识符表示。每个具体类型(例如,XYZType)中的静态方法用@JsonCreator注释: @JsonCreator public st

我目前正在使用Jackson 1.4.2,并尝试反序列化从UI传递回Java控制器(servlet)的
code
值(类型信息的唯一标识符)

有多种类型(例如,
ABCType
XYZType
,等等)都是从
abstractype
扩展而来的,但每个具体类型都有一个静态工厂方法,该方法作为单个参数、唯一标识符,并返回类型对象(名称、关联类型、描述、有效首字母缩写等)由该标识符表示。每个具体类型(例如,
XYZType
)中的静态方法用
@JsonCreator
注释:

@JsonCreator
public static XYZType getInstance(String code) {
    .....
}
但我看到的问题是,Jackson的映射程序试图将json反序列化为以下类型时抛出了一个异常:

原因:org.codehaus.jackson.map.JsonMappingException:找不到类型[简单类型,类com.company.type.XYZtype]:的默认构造函数,无法从Json对象实例化


静态工厂方法的
@JsonCreator
注释(或者与Jackson 1.4.2如何处理从
抽象类型扩展而来的具体类型有关)

问题在于Jackson只看到声明的基类型,不知道在哪里查找子类型。 由于1.5中添加了完整的多态类型处理,因此1.4需要在基类中添加factory方法,并从基类中添加dispatch方法。

注释@JsonCreator需要注释@JsonProperty。这提供了很少的信息,但提供了示例代码:

@JsonCreator
公共名称(@JsonProperty(“givenName”)字符串g、@JsonProperty(“familyName”)字符串f)
{
givenName=g;
familyName=f;
}
您将在中找到更详细的解释

因此,您的示例代码应该如下所示:

@JsonCreator
公共静态XYZType getInstance(@JsonProperty(“someCode”)字符串代码)
{
...
}