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 json y 'nombre' aparezca como 'etiqueta'. La documentación de Jackson no está claro en esto y lo he intentado cada anotación que ni remotamente parece que hace lo que necesito, pero no puedo conseguir name
a aparecer como label
y id
para que aparezca como value
en el JSON.
¿Alguien sabe cómo hacer esto o si esto es posible?
Respuestas:
¿Has intentado usar @JsonProperty?
fuente
@JsonProperty(value="label")
y no estaba funcionando, lo he intentado como me lo sugirió y funciona. gracias hombre, esto realmente ayudará a simplificar el código ahora.Tenga en cuenta que hay
org.codehaus.jackson.annotate.JsonProperty
en Jackson 1.xycom.fasterxml.jackson.annotation.JsonProperty
Jackson 2.x. Comprueba qué ObjectMapper estás usando (de qué versión) y asegúrate de usar la anotación adecuada.fuente
org.json4s.jackson
espacio de nombres. :) y posiblemente otra implementación dejackson
YMMV.Hay una opción más para cambiar el nombre del campo:
Jackson MixIns .
Es útil si trata con clases de terceros, que no puede anotar , o simplemente no desea contaminar la clase con anotaciones específicas de Jackson.
La documentación de Jackson para Mixins está desactualizada, por lo que este ejemplo puede proporcionar más claridad. En esencia: crea una clase mixin que realiza la serialización de la manera que desee. Luego regístralo en ObjectMapper:
fuente
Jackson
Si está usando Jackson, puede usar la
@JsonProperty
anotación para personalizar el nombre de una propiedad JSON dada.Por lo tanto, solo tiene que anotar los campos de entidad con la
@JsonProperty
anotación y proporcionar un nombre de propiedad JSON personalizado, como este:JavaEE o JakartaEE JSON-B
JSON-B es la capa de enlace estándar para convertir objetos Java hacia y desde JSON. Si está utilizando JSON-B, puede anular el nombre de la propiedad JSON mediante la
@JsonbProperty
anotación:fuente