J'utilise jackson pour convertir un de mes objets en json. L'objet a 2 champs:
@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; }
}
Puisque je veux utiliser ceci avec la fonction de complétion automatique de jQuery, je souhaite que "id" apparaisse en tant que "valeur" dans le JSON et que "name" apparaisse en tant qu '"étiquette". La documentation de jackson n’est pas claire à ce sujet et j’ai essayé toutes les annotations qui semblaient bien, même de loin, faire ce dont j'avais besoin mais je ne pouvais pas obtenir name
apparaître sous la forme label
et id
apparaître comme value
dans le JSON.
Est-ce que quelqu'un sait comment faire cela ou si cela est possible?
Avez-vous essayé d'utiliser @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; }
}
Sachez qu'il existe org.codehaus.jackson.annotate.JsonProperty
dans Jackson 1.x et com.fasterxml.jackson.annotation.JsonProperty
dans Jackson 2.x. Vérifiez quel ObjectMapper vous utilisez (à partir de quelle version) et assurez-vous que vous utilisez l'annotation appropriée.
Il existe une option supplémentaire pour renommer le champ:
Utile si vous traitez avec des classes tierces, que vous ne pouvez pas annoter , ou que vous ne voulez pas polluer la classe avec des annotations spécifiques à Jackson.
La documentation de Jackson pour Mixins est obsolète, donc cet exemple peut fournir plus de clarté. En substance, vous créez une classe mixin qui effectue la sérialisation à votre guise. Puis enregistrez-le dans ObjectMapper:
objectMapper.addMixIn(ThirdParty.class, MyMixIn.class);