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>
Apabila deserialisasi daripada JSON, anda mahukan format:
<code class="json">{ "red": 12 }</code>
Walau bagaimanapun , semasa bersiri, ia hendaklah diformatkan sebagai:
<code class="json">{ "r": 12 }</code>
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>
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>
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>
Cetakan:
Serialization: {"r": 5} Deserialization: 25
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!