Maison >Java >javaDidacticiel >Comment gérer différents noms de propriété pour la sérialisation et la désérialisation JSON dans Jackson ?

Comment gérer différents noms de propriété pour la sérialisation et la désérialisation JSON dans Jackson ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-30 02:19:021064parcourir

How to Handle Different Property Names for JSON Serialization and Deserialization in Jackson?

Gestion des différences de noms de propriété pour la sérialisation et la désérialisation JSON

Dans Jackson, il est possible d'avoir des noms différents pour une propriété lors de la sérialisation et de la désérialisation. Prenons un exemple avec la classe Coordonnées suivante :

<code class="java">class Coordinates {
  int red;
}</code>

Nous voulons le format JSON suivant pour la désérialisation :

<code class="json">{
  "red": 12
}</code>

Cependant, pour la sérialisation, nous avons besoin du format suivant :

<code class="json">{
  "r": 12
}</code>

Solution :

La solution réside dans l'utilisation de l'annotation @JsonProperty sur les méthodes getter et setter, en s'assurant qu'elles portent des noms différents :

<code class="java">class Coordinates {
    int red;

    @JsonProperty("r")
    public byte getRed() {
      return red;
    }

    @JsonProperty("red")
    public void setRed(byte red) {
      this.red = red;
    }
}</code>

Notez que les noms de méthodes doivent être différents. Jackson les interprète comme des références à différentes propriétés, plutôt que comme la même propriété avec des noms différents.

Notes supplémentaires :

  • Pour les attributs de classe, il est conseillé de utilisez le type de données approprié (octet dans ce cas) pour faire correspondre les valeurs potentielles de la charge utile JSON.
  • L'ObjectMapper utilisé pour la sérialisation et la désérialisation peut être personnalisé si nécessaire pour configurer des paramètres supplémentaires.

Code de test :

<code class="java">Coordinates c = new Coordinates();
c.setRed((byte) 5);

ObjectMapper mapper = new ObjectMapper();
System.out.println("Serialization: " + mapper.writeValueAsString(c));

Coordinates r = mapper.readValue("{\"red\":25}",Coordinates.class);
System.out.println("Deserialization: " + r.getR());</code>

Sortie :

Serialization: {"r":5}
Deserialization: 25

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn