Heim > Java > javaLernprogramm > Hauptteil

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

Barbara Streisand
Freigeben: 2024-10-26 06:30:30
Original
421 Leute haben es durchsucht

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>
Nach dem Login kopieren

Bei der Deserialisierung von JSON möchten Sie das Format:

<code class="json">{
  "red": 12
}</code>
Nach dem Login kopieren

Allerdings , während der Serialisierung sollte es wie folgt formatiert sein:

<code class="json">{
  "r": 12
}</code>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Drucke:

Serialization: {"r": 5}
Deserialization: 25
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage