Maison > Java > javaDidacticiel > 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
Libérer: 2024-10-26 06:30:30
original
496 Les gens l'ont consulté

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>
Copier après la connexion

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

<code class="json">{
  "red": 12
}</code>
Copier après la connexion

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

<code class="json">{
  "r": 12
}</code>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

Impressions :

Serialization: {"r": 5}
Deserialization: 25
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal