我有一个杰克逊的多态问题。 我想将JSON数据反序列化为多态类型。阅读Jackson文档,我可以将JSON数据反序列化为多态类型。但是,我有一个特例。我有一个类结构如下:
class Supreme {
private String type;
}
class Foo extends Supreme {
public String label;
}
class Bar extends Supreme {
}
注意:Class Bar除了继承的“type”字段外没有任何其他成员变量。
我已将该结构转换为:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,include = JsonTypeInfo.As.PROPERTY,property ="type")
@JsonSubTypes({@Type(value = Foo.class, name = "Foo"),@Type(value = Bar.class, name = "Bar") })
class Supreme {
}
class Foo extends Supreme {
public String label;
}
class Bar extends Supreme {
}
String data=
"[{
"type": "Foo",
"label": "abc"
},
{
"type": "Bar"
}]"
如果我传入上面的json数据,如:
new ObjectMapper().readValue(data, new TypeReference<List<Supreme>>());
我得到类似“无法从END_TOKEN反序列化类Bar”之类的内容。我相信这是因为JsonTypeInfo和JsonSubTypes注释已经解析了“type”属性,并且发现数组中的第二个实体应该映射到Bar类;但是它试图在该2实体中的type属性之后找到“something”。换句话说,杰克逊认为它是一个空的JSON对象。
(注意:上面没有数组中第二个条目的数据工作正常。换句话说,我们可以反序列化到包含Foo对象的列表,因为它至少具有“type”以外的属性)
知道怎么解决这个问题吗?
答案 0 :(得分:1)
错误的是,我使用的是Jackson 1.5 我碰到了杰克逊1.9,这个例外消失了。所以Jackson 1.5中有一个错误