Rumah > Java > javaTutorial > teks badan

Bagaimana Menggunakan Nama Harta Berbeza untuk Pensirian dan Penyahserialisasian di Jackson?

Barbara Streisand
Lepaskan: 2024-10-26 06:30:30
asal
336 orang telah melayarinya

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

Nama Harta Berbeza untuk Pensirilan dan Penyahseririan di Jackson

Bolehkah sifat JSON mempunyai nama yang berbeza semasa pensirilan dan penyahseririan? Pustaka Jackson membenarkan penyesuaian ini.

Sebagai contoh, pertimbangkan kelas Coordinates:

<code class="java">class Coordinates {
  int red;
}</code>
Salin selepas log masuk

Apabila deserialisasi daripada JSON, anda mahukan format:

<code class="json">{
  "red": 12
}</code>
Salin selepas log masuk

Walau bagaimanapun , semasa bersiri, ia hendaklah diformatkan sebagai:

<code class="json">{
  "r": 12
}</code>
Salin selepas log masuk

Melaksanakan ini menggunakan anotasi @JsonProperty tidak berfungsi seperti yang dimaksudkan kerana kedua-dua pengambil dan penetap mempunyai nama yang berbeza:

<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>
Salin selepas log masuk

Ini menghasilkan pengecualian "Medan tidak dikenali "merah"".

Untuk menangani perkara ini, gunakan nama kaedah yang berbeza untuk pengambil dan penetap:

<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>
Salin selepas log masuk

Dengan cara ini, Jackson mengiktiraf sifat sebagai medan yang berbeza, membenarkan nama yang berbeza semasa penyiaran dan penyahserikatan.

Contohnya:

<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>
Salin selepas log masuk

Cetakan:

Serialization: {"r": 5}
Deserialization: 25
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana Menggunakan Nama Harta Berbeza untuk Pensirian dan Penyahserialisasian di Jackson?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!