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!