Cambiar el nombre del campo en JSON usando Jackson


Estoy usando Jackson para convertir un objeto mío a 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; }
}

Ya que quiero usar esto con la función de autocompletar de jQuery, quiero que 'id' aparezca como 'value' en el json y 'name' aparezca como 'label'. La documentación de Jackson no es clara en esto y he intentado cada anotación que incluso remotamente parece que hace lo que necesito, pero no puedo conseguir name para aparecer como label y id para aparecer como value en el json.

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

Author: Ali, 2011-09-01

3 answers

¿Has intentado usar @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; }
}
 247
Author: henrik_lundgren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-09 10:32:09

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 usar la anotación adecuada.

 35
Author: m3th0dman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-22 09:13:42

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

Jackson MixIns .

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

 5
Author: Dimitar II,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-22 04:11:48