Maison >Java >javaDidacticiel >Comment obtenir différents noms de propriété pour la sérialisation et la désérialisation avec Jackson ?

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

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 05:52:30540parcourir

How to Achieve Different Property Names for Serialization and Deserialization with Jackson?

Sérialisation/désérialisation JSON avec différents noms de propriété

La bibliothèque Jackson offre la flexibilité de spécifier différents noms pour une propriété lors de la sérialisation et de la désérialisation. Considérons le scénario suivant :

Vous disposez d'une classe nommée "Coordonnées" avec un champ "rouge". Lors de la désérialisation à partir de JSON, vous souhaitez que ce champ soit mappé au nom de propriété « rouge ». Cependant, lors de la sérialisation, vous souhaitez que le nom de la propriété soit "r".

Solution

Pour y parvenir, vous pouvez utiliser l'annotation @JsonProperty avec différentes méthodes noms pour le getter et le setter :

public class Coordinates {
    private int red;

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

    @JsonProperty("red")
    public void setRed(int red) {
        this.red = red;
    }
}

En utilisant différents noms de méthodes pour le getter et le setter, Jackson les reconnaît comme des propriétés distinctes. Lors de la désérialisation, il mappe la propriété JSON « red » au setter avec l'annotation @JsonProperty("red"). Lors de la sérialisation, il utilise le getter avec l'annotation @JsonProperty("r") pour récupérer la valeur et la sérialiser en tant que propriété "r".

Exemple

Pour illustrer ce comportement, considérons le code de test suivant :

Coordinates c = new Coordinates();
c.setRed(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.getRed());

Sortie :

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

Comme vous pouvez le voir, le nom de propriété "red" est utilisé lors de la désérialisation, tandis que le nom de propriété "r" est utilisé lors de la sérialisation.

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