Вложенная полиморфная десериализация с Джексоном
У меня есть сценарий использования, очень похожий на десериализацию вложенного полиморфного типа Джексона, за исключением того, что я хочу десериализовать два вложенных абстрактных типа на основе 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
, На упомянутый вопрос есть "проверенный" ответ, но, насколько я понимаю, он предлагает сгладить иерархию классов до одного полиморфного типа.