Cambiar el nombre del campo en JSON usando Jackson

Estoy usando jackson para convertir un objeto mío en json. El objeto tiene 2 campos:

@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; } } 

Como quiero usar esto con la función de autocompletar jQuery, quiero que ‘id’ aparezca 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 hacer que el name aparezca como label e id para que aparezca como value en el json.

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

¿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; } } 

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.

Hay una opción más para cambiar el nombre del campo:

Jackson MixIns .

Es útil si trabajas con clases de terceros, que no puedes anotar , o simplemente no quieres contaminar la clase con anotaciones específicas de Jackson.