Di Jackson, saat Anda memberi anotasi pada konstruktor @JsonCreator
, Anda harus memberi anotasi pada argumennya @JsonProperty
. Jadi konstruktor ini
public Point(double x, double y) {
this.x = x;
this.y = y;
}
menjadi ini:
@JsonCreator
public Point(@JsonProperty("x") double x, @JsonProperty("y") double y) {
this.x = x;
this.y = y;
}
Saya tidak mengerti mengapa itu perlu. Bisakah Anda menjelaskan?
java
json
serialization
jackson
Ori Popowski
sumber
sumber
Nama parameter biasanya tidak dapat diakses oleh kode Java saat runtime (karena dijatuhkan oleh kompiler), jadi jika Anda menginginkan fungsionalitas itu, Anda perlu menggunakan fungsionalitas bawaan Java 8 atau menggunakan pustaka seperti ParaNamer untuk mendapatkan akses untuk itu.
Jadi agar tidak harus menggunakan anotasi untuk argumen konstruktor saat menggunakan Jackson, Anda dapat menggunakan salah satu dari 2 modul Jackson berikut:
jackson-module-parameter-names
Modul ini memungkinkan Anda mendapatkan argumen konstruktor bebas anotasi saat menggunakan Java 8 . Untuk menggunakannya, Anda harus mendaftarkan modul terlebih dahulu:
Kemudian kompilasi kode Anda menggunakan tanda -parameters:
Tautan: https://github.com/FasterXML/jackson-modules-java8/tree/master/parameter-names
jackson-modul-paranamer
Yang lainnya ini hanya mengharuskan Anda untuk mendaftarkan modul atau mengkonfigurasi introspeksi anotasi (tetapi tidak keduanya seperti yang ditunjukkan oleh komentar). Ini memungkinkan Anda untuk menggunakan argumen konstruktor bebas anotasi pada versi Java sebelum 1.8 .
Tautan: https://github.com/FasterXML/jackson-modules-base/tree/master/paranamer
sumber
Anda dapat menghindari anotasi konstruktor dengan jdk8 di mana secara opsional kompilator akan memasukkan metadata dengan nama parameter konstruktor. Kemudian dengan modul jackson-module-parameter-names Jackson dapat menggunakan konstruktor ini. Anda dapat melihat contohnya di posting Jackson tanpa penjelasan
sumber
Karena bytecode Java tidak menyimpan nama metode atau argumen konstruktor.
sumber
@JsonProperty
anotasinyaSeseorang dapat dengan mudah menggunakan anotasi java.bean.ConstructorProperties - jauh lebih sedikit verbose dan Jackson juga menerimanya. Sebagai contoh :
sumber
Ketika saya memahami ini dengan benar, Anda mengganti konstruktor default dengan yang berparameter dan karena itu harus menjelaskan kunci JSON yang digunakan untuk memanggil konstruktor dengan.
sumber
Seperti yang dijelaskan sebelumnya dalam dokumentasi anotasi , anotasi tersebut menunjukkan bahwa nama argumen digunakan sebagai nama properti tanpa modifikasi apa pun, tetapi dapat ditentukan ke nilai yang tidak kosong untuk menentukan nama yang berbeda:
sumber
Temukan saja dan dapatkan jawaban di suatu tempat. Anda dapat menggunakan anotasi di bawah ini sejak 2.7.0
sumber