Unterschiedliche Eigenschaftsnamen für Serialisierung und Deserialisierung in Jackson
Können JSON-Eigenschaften während der Serialisierung und Deserialisierung unterschiedliche Namen haben? Die Jackson-Bibliothek ermöglicht diese Anpassung.
Betrachten Sie beispielsweise eine Koordinatenklasse:
<code class="java">class Coordinates { int red; }</code>
Bei der Deserialisierung von JSON möchten Sie das Format:
<code class="json">{ "red": 12 }</code>
Allerdings , während der Serialisierung sollte es wie folgt formatiert sein:
<code class="json">{ "r": 12 }</code>
Die Implementierung mithilfe der @JsonProperty-Annotation funktioniert nicht wie beabsichtigt, da sowohl Getter als auch Setter unterschiedliche Namen haben:
<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>
Dies führt zur Ausnahme „Unerkanntes Feld „rot““.
Um dieses Problem zu beheben, verwenden Sie unterschiedliche Methodennamen für Getter und 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>
Auf diese Weise erkennt Jackson die Eigenschaften als verschiedene Felder, die unterschiedliche Namen während der Serialisierung und Deserialisierung ermöglichen.
Zum Beispiel:
<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>
Drucke:
Serialization: {"r": 5} Deserialization: 25
Das obige ist der detaillierte Inhalt vonWie verwende ich in Jackson unterschiedliche Eigenschaftsnamen für die Serialisierung und Deserialisierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!