Heim  >  Artikel  >  Java  >  Wie verwende ich in Jackson unterschiedliche Eigenschaftsnamen für die Serialisierung und Deserialisierung?

Wie verwende ich in Jackson unterschiedliche Eigenschaftsnamen für die Serialisierung und Deserialisierung?

Barbara Streisand
Barbara StreisandOriginal
2024-10-26 06:30:30422Durchsuche

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

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn