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".