polymorphic defaulttyping java polymorphism jackson deserialization

java - defaulttyping - jackson polymorphic



Polimorfismo en las anotaciones de jackson: uso de @JsonTypeInfo (1)

Me gustaría saber si la anotación @JsonTypeInfo se puede utilizar para las interfaces. Tengo un conjunto de clases que deberían ser serializadas y deserializadas.

Esto es lo que estoy tratando de hacer. Tengo dos clases de implementación Sub1 , Sub2 implementando MyInt . Algunas de las clases de modelo tienen la referencia de interfaz para los tipos de implementación. Me gustaría deserializar los objetos basados ​​en polimorfismo.

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=As.WRAPPER_OBJECT) @JsonSubTypes({ @Type(name="sub1", value=Sub1.class), @Type(name="sub2", value=Sub2.class)}) public interface MyInt{ } @JsonTypeName("sub1") public Sub1 implements MyInt{ } @JsonTypeName("sub2") public Sub2 implements MyInt{ }

Obtengo la siguiente JsonMappingException :

Token inesperado (END_OBJECT), FIELD_NAME esperado: se necesita la cadena JSON que contiene el ID de tipo


@ JsonSubTypes.Type debe tener un valor y un nombre como este,

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=As.WRAPPER_OBJECT, property="type") @JsonSubTypes({ @JsonSubTypes.Type(value=Dog.class, name="dog"), @JsonSubTypes.Type(value=Cat.class, name="cat") })

En la subclase, use @JsonTypeName("dog") para decir el nombre.

Los valores "perro" y "gato" se establecerán en la propiedad denominada "tipo".