2010-12-10 9 views
6

Tengo el siguiente JSON:¿Cómo puedo serializar este JSON utilizando las anotaciones de Jackson?

{ 
    fields : { 
      "foo" : "foovalue", 
      "bar" : "barvalue" 
    } 
} 

me escribió un POJO de la siguiente manera:

public class MyPojo { 

    @JsonProperty("fields") 
    private List<Field> fields; 

    static class Field { 
     @JsonProperty("foo") private String foo; 
     @JsonProperty("bar") private String bar; 

     //Getters and setters for those 2 
} 

Esta falla, obviamente, porque mi campo JSON "campos" es un HashMap, y no una lista.
Mi pregunta es: ¿hay alguna anotación "mágica" que pueda hacer que Jackson reconozca las claves del mapa como nombres de propiedades pojo y asigne los valores del mapa a los valores de las propiedades pojo?

PS: Realmente no quiero tener mis campos de objeto como ...

private Map<String, String> fields; 

... porque en mi JSON-mundo real que tengo objetos complejos en los valores de mapa, no sólo cuerdas ...

Gracias ;-)

Philippe

+0

Además, cuando trato de serializar esos mapas, obtengo: Error de E/S: No se puede deserializar la instancia de java.lang.String fuera del token START_OBJECT – Philippe

Respuesta

12

Ok, para que JSON, sólo debería modificar su ejemplo un poco, como:

public class MyPojo { 
    public Fields fields; 
} 

public class Fields { 
    public String foo; 
    public String bar; 
} 

ya que la estructura de los objetos necesita alinearse con la estructura de JSON. Podría usar setters y getters en lugar de campos públicos, por supuesto (e incluso constructores en lugar de setters o campos), este es solo el ejemplo más simple.

su clase original produciría/consumir más como JSON:

{ 
    "fields" : [ 
    { 
     "foo" : "foovalue", 
     "bar" : "barvalue" 
    } 
    ] 
} 

porque las listas se asignan a los arrays JSON.

Cuestiones relacionadas