Polimorfismo en las anotaciones de Jackson: uso de @JsonTypeInfo


Me gustaría saber si la anotación @JsonTypeInfo puede usarse para interfaces. He conjunto de clases que se va a serializar y deserializar.

Esto es lo que estoy tratando de hacer. Tengo dos clases de implementación Sub1, Sub2 implementing MyInt. Algunas de las clases 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 lo siguiente JsonMappingException:

Token inesperado (END_OBJECT), FIELD_NAME esperado: necesita cadena JSON que contiene type id

Author: jediz, 2012-08-03

1 answers

@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 'dog' y 'cat' se establecerán en la propiedad llamada 'type'.

 43
Author: Senthil Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-04 04:52:16