2011-04-29 14 views
11

Tengo tipos polimórficos y deserialización de obras de JSON a POJO. Seguí la documentación here, de hecho. Al serializar POJOs en JSON obtengo un atributo no deseado, específicamente el nombre de tipo lógico.¿Cómo puedo evitar que Jackson serialice una propiedad de anotación de tipo polimórfico?

import static org.codehaus.jackson.annotate.JsonTypeInfo.*; 

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

public class Dog extends Animal { ... } 
public class Cat extends Animal { ... } 

Cuando Jackson se serializa en JSON, proporciona la información de tipo que no quiero exponer.

{"type":"dog", ... } 
{"type":"cat", ... } 

¿Puedo evitar esto de alguna manera? Solo quiero ignorar type al deserializar.

+1

Usted dijo: "Solo quiero ignorar el tipo cuando deserializo". ¿En su lugar, quiso decir "solo quiero ignorar el tipo al serializar"? –

+2

Estoy impresionado de que hayas podido descifrar esto de la documentación. No hay un solo ejemplo de uso de '@ JsonSubTypes' en esa página wiki. –

Respuesta

5

Una solución sencilla sería la de simplemente mover los @JsonTypeInfo y @JsonSubTypes configuraciones a un MixIn, y sólo registrar el MixIn de deserialización.

mapper.getDeserializationConfig().addMixInAnnotations(MyClass.class, MyMixIn.class)

+3

¿Puede compartir el código de la solución que ha resuelto su problema? – Ketan

+0

http://programmerbruce.blogspot.com/2011/05/deserialize-json-with-jackson-into.html – jmcmahon

0

Esto me llevó mucho tiempo para resolver, así que pensé que me gustaría compartir.

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, 
visible = false, property = "type") 

visible=false asegura que si existe la propiedad type en la clase, que no se rellena con el valor de type durante la deserialización.

include = JsonTypeInfo.As.EXISTING_PROPERTY dicta que si existe la propiedad type, utilice ese valor durante la serialización de lo contrario no hacer nada.

Cuestiones relacionadas