1

假设我们有以下类型:

interface Animal {}
class Dog implements Animal {...}
class Cat implements Animal {...}
class Zoo {
    private String animalType;
    private Animal animal;
    ...
}

有了它CatDog具有不同的属性,我们如何根据始终存在于 json 中Zoo的字符串将对象反序列化为适当的 Animal 子类型?animalType我知道如何做到这一点,custom deserialization但我找不到使用Jackson annotations. 如果animalType财产位于,Cat或者Dog但在我的情况下,它的位置在Zoo.

任何的想法 ?

4

1 回答 1

2

您可以在其中注释animal字段ZooJsonTypeInfo指定您想要的子类型,Dog或者也可以在 中Cat为每个字段添加注释。棘手的一点是指定特定类型的将来自JSON 之外的属性,即animalTypeZooAnimalAnimalEXTERNAL_PROPERTY

@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;
于 2017-06-19T17:36:23.743 回答