Maison  >  Article  >  Java  >  Comment utiliser différents noms de propriété pour la sérialisation et la désérialisation dans Jackson ?

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

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 06:30:30423parcourir

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

Noms de propriétés différents pour la sérialisation et la désérialisation à Jackson

Les propriétés JSON peuvent-elles avoir des noms différents lors de la sérialisation et de la désérialisation ? La bibliothèque Jackson permet cette personnalisation.

Par exemple, considérons une classe Coordonnées :

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

Lors de la désérialisation à partir de JSON, vous souhaitez le format :

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

Cependant , lors de la sérialisation, il doit être formaté comme :

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

L'implémentation de ceci à l'aide de l'annotation @JsonProperty ne fonctionne pas comme prévu car le getter et le setter ont 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>

Cela entraîne l'exception "Champ non reconnu "rouge"".

Pour résoudre ce problème, utilisez des noms de méthode différents pour le getter et le setter :

<code class="java">public class Coordinates {
    byte red;

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

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

De cette façon, Jackson reconnaît les propriétés comme différents champs, permettant des noms différents lors de la sérialisation et de la désérialisation.

Par exemple :

<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>

Impressions :

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