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!