Java 使用注释的Jackson多态反序列化
假设我们有以下类型:Java 使用注释的Jackson多态反序列化,java,jackson,deserialization,jackson2,jackson-databind,Java,Jackson,Deserialization,Jackson2,Jackson Databind,假设我们有以下类型: interface Animal {} class Dog implements Animal {...} class Cat implements Animal {...} class Zoo { private String animalType; private Animal animal; ... } 既然Cat和Dog具有不同的属性,我们如何根据json中始终存在的animalType字符串将Zoo对象反序列化为适当的动物子类型?我知道如
interface Animal {}
class Dog implements Animal {...}
class Cat implements Animal {...}
class Zoo {
private String animalType;
private Animal animal;
...
}
既然Cat
和Dog
具有不同的属性,我们如何根据json中始终存在的animalType
字符串将Zoo
对象反序列化为适当的动物子类型?我知道如何使用自定义反序列化
,但我找不到使用Jackson注释
的方法。如果animalType
属性位于Cat
或Dog
中,但在我的情况下,它的位置位于Zoo
中,则这是可能的
有什么想法吗?你可以用
JsonTypeInfo
注释Zoo
中的animalType
字段,以指定你想要Dog
或Cat
的子类型。棘手的一点是指定Animal
的特定类型将来自JSON中Animal
之外的属性,即EXTERNAL_属性
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "animalType")
@JsonSubTypes({
@JsonSubTypes.Type(value = Cat.class, name = "cat"),
@JsonSubTypes.Type(value = Dog.class, name = "dog")
})
private Animal animal;
谢谢,JsonTypeInfo.As.EXTERNAL_属性正是我想要的。