2011-08-31 26 views
103

Estoy usando jackson para convertir un objeto mío en json. El objeto tiene 2 campos:Cambiar el nombre del campo en JSON usando Jackson

@Entity 
public class City { 
    @id 
    Long id; 
    String name; 
    public String getName() { return name; } 
    public void setName(String name){ this.name = name; } 
    public Long getId() { return id; } 
    public void setName(Long id){ this.id = id; } 
} 

Ya que quiero usar esto con la función completa jQuery automática quiero 'id' para aparecer como 'valor' en el JSON y 'nombre' para que aparezca como 'etiqueta' . La documentación de jackson no está clara en esto y he intentado cada anotación que incluso remotamente parece que hace lo que necesito pero no puedo obtener name para que aparezca como y id para que aparezca como value en el json.

¿Alguien sabe cómo hacer esto o si esto es posible?

+0

if Si alguna vez va a utilizar potencialmente la entidad ("Ciudad") para cualquier otro propósito o lógica comercial, evitaría definir su representación JSON como Label & Value. OTOH, si se trata de datos puramente de referencia utilizados para combos, es probable que tenga más: hacer una entidad genérica (Par u Opción) para cubrir todos estos es un posible enfoque a considerar. –

Respuesta

214

¿Has probado con @JsonProperty?

@Entity 
public class City { 
    @id 
    Long id; 
    String name; 

    @JsonProperty("label") 
    public String getName() { return name; } 

    public void setName(String name){ this.name = name; } 

    @JsonProperty("value") 
    public Long getId() { return id; } 

    public void setId(Long id){ this.id = id; } 
} 
+3

Sí, lo había intentado, sin embargo estaba haciendo '@JsonProperty (value =" label ")' y no funcionaba, lo he intentado como lo sugirió y ¡funciona! Gracias, esto realmente ayudará a simplificar el código ahora. – Ali

+0

Tengo un requisito similar. Solo que estoy usando Jackson con RESTEasy y esto no funciona: - ¡Extraño! – Nikhil

+0

compruebe que Jackson realmente es el proveedor configurado y no algo más –

27

Tenga en cuenta que hay org.codehaus.jackson.annotate.JsonProperty en Jackson 1.x y com.fasterxml.jackson.annotation.JsonProperty en Jackson 2.x. Compruebe qué ObjectMapper está utilizando (desde qué versión) y asegúrese de utilizar la anotación adecuada.

5

Hay otra opción para cambiar el nombre de campo:

Jackson MixIns.

Útil si se ocupa de clases de terceros, que es que no puede anotar, o simplemente no desea contaminar la clase con anotaciones específicas de Jackson.

Cuestiones relacionadas