与Jackson嵌套的多态反序列化

时间:2016-11-21 14:01:44

标签: java json jackson polymorphism deserialization

我有一个与Jackson deserializing nested polymorphic type非常相似的用例,除了我想要基于具有不同属性名称的JsonTypeInfo.As.PROPERTY反序列化两个嵌套抽象类型。

超类型:

@JsonTypeInfo(
    use = JsonTypeInfo.Id.NAME,
    include = JsonTypeInfo.As.PROPERTY,
    property = "first_level_discriminant")
@JsonSubTypes({
        @JsonSubTypes.Type(value = SecondLevel.class, name = "second_level")
})
public abstract class FirstLevel { }

第二级类型:

@JsonTypeInfo(
    use = JsonTypeInfo.Id.NAME,
    include = JsonTypeInfo.As.PROPERTY,
    property = "second_level_discriminant")
@JsonSubTypes({
        @JsonSubTypes.Type(value = ConcreteType.class, name = "concrete_type")
})
public abstract class SecondLevel { }

具体类型:

public class ConcreteType extends SecondLevel {
    public String value;
}

但是当我尝试反序列化{"first_level_discriminant":"second_level","second_level_discriminant":"concrete_type","value":"value"}时,我得到一个常规的抽象类型错误(Can not construct instance of SecondLevel: abstract types either need...)。反序列化SecondLevel直接起作用,反序列化FirstLevel的具体子类型也是如此。在上述问题上有一个“检查”的答案,但据我了解,它建议将类层次结构扁平化为单一多态类型。

0 个答案:

没有答案