我想也许我误解了一些杰克逊图书馆是如何工作的。 我正在尝试将JSON反序列化为对象,而不包含我要反序列化的对象的类型信息。
例如,我有以下所示联系信息的Correspondence
亲子关系:
@JsonRootName("correspondence")
public class Correspondence {
private Contact contact;
// getter/setter not shown for brevity
}
@JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = "concreteType")
@JsonSubTypes({@JsonSubTypes.Type(value = Person.class, name = "person")})
public interface Contact {
// just a wrapper interface
}
@JsonRootName("person")
public class Person implements Contact {
private String firstName;
private String lastName;
// getter/setter not shown for brevity
}
当我拥有包含属性JsonTypeInfo
时,发送以下JSON允许我使用JsonSubTypes
和PROPERTY
反序列化此对象。 JSON将是:
{
"correspondence": {
"contact": {
"type": "person",
"firstName": "Johnny",
"lastName": "Bravo"
}
}
}
以上格式,但我想在JSON中发送的格式为:
{
"correspondence": {
"person": {
"firstName": "Johnny",
"lastName": "Bravo"
}
}
}
如您所见,Contact
,Person
的子类现在是内部对象的根名称。我认为这可以使用包含属性WRAPPER_OBJECT
来完成,但对于我的生活,我似乎无法让它工作。我已经阅读了多个资源,这些资源都有详细记录,这就是为什么我认为我可能会误解如何使用Jackson库来实现我的目标。
参考文献: Jackson Polymorphic Deserialization Polymorphic JSON serialization tutorial