我有一个杰克逊多态问题。我想将 JSON 数据反序列化为多态类型。阅读 Jackson 文档,我可以将 JSON 数据反序列化为多态类型。但是,我有一个特殊情况。我有一个类结构如下:
class Supreme {
private String type;
}
class Foo extends Supreme {
public String label;
}
class Bar extends Supreme {
}
注意:类 Bar 除了继承的“类型”字段之外没有任何其他成员变量。
我已将该结构转换为:
@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 注释已经解析了“类型”属性并发现数组中的第二个实体应该映射到 Bar 类;但是它试图在该 2 实体中的 type 属性之后找到“某物”。换句话说,Jackson 认为它是一个空的 JSON 对象。
(注意:数组中没有第二个条目的上述数据可以正常工作。换句话说,我们可以反序列化为包含 Foo 对象的列表,因为它至少具有“类型”以外的属性)
知道如何解决这个问题吗?