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_属性正是我想要的。