Rumah >Java >javaTutorial >Bagaimana Menggunakan Nama Berbeza untuk Sifat JSON Semasa Pensirilan dan Penyahserikatan Jackson?

Bagaimana Menggunakan Nama Berbeza untuk Sifat JSON Semasa Pensirilan dan Penyahserikatan Jackson?

Linda Hamilton
Linda Hamiltonasal
2024-10-26 12:03:29364semak imbas

How to Use Different Names for JSON Properties During Jackson Serialization and Deserialization?

Menggunakan Nama Berbeza untuk Sifat JSON Semasa Pensirilan dan Penyahseriiran di Jackson

Pensirilan dan penyahserikatan selalunya memerlukan nama medan yang sepadan antara kelas JSON dan Java. Walau bagaimanapun, mungkin terdapat keadaan di mana anda ingin menggunakan nama yang berbeza untuk medan yang sama semasa proses ini. Sebagai contoh, pertimbangkan kelas Koordinat berikut:

<code class="java">class Coordinates {
  int red;
}</code>

Dalam senario ini, anda mungkin menginginkan format JSON berikut untuk penyahserikatan:

<code class="json">{
  "red": 12
}</code>

Serentak, anda mungkin lebih suka format JSON yang berbeza untuk bersiri:

<code class="json">{
  "r": 12
}</code>

Pada mulanya, cubaan menggunakan anotasi @JsonProperty pada kedua-dua kaedah getter dan setter mungkin menyebabkan pengecualian:

<code class="java">@JsonProperty("r")
public byte getRed() {
  return red;
}

@JsonProperty("red")
public void setRed(byte red) {
  this.red = red;
}</code>

Walau bagaimanapun, isu ini boleh dibetulkan dengan memastikan bahawa nama kaedah adalah berbeza. Contohnya:

<code class="java">public byte getR() {
  return red;
}

public void setRed(byte red) {
  this.red = red;
}</code>

Dengan memberikan nama kaedah yang berbeza, Jackson mentafsirkannya sebagai medan yang berasingan. Kod ujian berikut menunjukkan kejayaan penggunaan pendekatan ini:

<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>

Output yang dijangkakan ialah:

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

Atas ialah kandungan terperinci Bagaimana Menggunakan Nama Berbeza untuk Sifat JSON Semasa Pensirilan dan Penyahserikatan Jackson?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn