2011-03-11 20 views
9

dado una clase de entidad simple como estoDeserialización personalizada de JSON FIELD con Jackson en java?

public class User 
{ 
    @JsonProperty 
    public Calendar createdOn; 

    @JsonProperty 
    public String name; 
} 

¿Hay alguna manera de enlazar en la transmisión API Jackson deserializar personalizado sólo el campo CreatedOn? Si no lo hay, ¿sería posible algo así en el futuro?

public class User 
{ 
    @JsonProperty 
    @JsonConverter(MyCustomCalendarConverter.class) 
    public Calendar createdOn; 

    @JsonProperty 
    public String name; 
} 

Parece que pude custom deserialize the entire entity. Solo tengo curiosidad si hay una manera de personalizar la deserialización solo un campo a la vez para, por ejemplo, analizar un formato de fecha particular, o leer una matriz de valores en una entidad personalizada, etc. mientras dejo que Jackson deserializar el resto de la entidad normalmente.

Respuesta

2

Se puede definir serializar personalizada utilizando un campo específico @JsonSerialize:

@JsonSerialize(using=MuCustomCalendarConverter.class) 
+0

Gracias! (Perdón, me perdí esto en los documentos ... He estado buscando en http://wiki.fasterxml.com/JacksonHowToCustomDeserializers) – jandersen

+0

Hmm ... ¿Hay algo especial que necesite hacer con el ObjectMapper para que lo use? Creé una clase que extiende DateDeserializer y la apliqué a mi propiedad (de tipo java.util.Date) y acabo de crear un punto de interrupción en el constructor. Cuando deserializo el punto de corte nunca se golpea y obtengo un error de deserialización (por lo que quiero personalizar la deserialización ...) ¿Alguna idea? – jandersen

+1

Bueno, terminé cambiando a 'FromStringDeserializer ' y eso funcionó ... pero también estoy implementando en GAE y parecía haber tenido el mismo problema al agregar un serializador personalizado hasta que hice una limpieza/reconstrucción en mi proyecto ... probablemente no tenía nada que ver con Jackson después de todo. – jandersen

Cuestiones relacionadas