Вложенная полиморфная десериализация с Джексоном

У меня есть сценарий использования, очень похожий на десериализацию вложенного полиморфного типа Джексона, за исключением того, что я хочу десериализовать два вложенных абстрактных типа на основе JsonTypeInfo.As.PROPERTY с разными именами свойств.

Supertype:

@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 ответов

Другие вопросы по тегам