Perilaku jackon default tampaknya menggunakan kedua properti (getter dan setter) dan bidang untuk membuat cerita bersambung dan melakukan deserialisasi ke json.
Saya ingin menggunakan bidang sebagai sumber kan konfigurasi serialisasi dan karena itu tidak ingin jackson melihat properti sama sekali.
Saya bisa melakukan ini berdasarkan kelas individu dengan anotasi:
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
Tapi saya tidak mau harus meletakkan ini di setiap kelas ...
Apakah mungkin untuk mengkonfigurasi ini secara global? Suka menambahkan beberapa ke Object Mapper?
INFER_PROPERTY_MUTATORS
bendera. Ini memaksa visibilitas setter jika ada pengambil atau bidang yang terlihat.Jawaban:
Anda bisa mengonfigurasi ObjectMappers individual seperti ini:
Jika Anda ingin mengaturnya secara global, saya biasanya mengakses mapper yang dikonfigurasi melalui kelas wrapper.
sumber
withGetterVisibility
tidak membahasis*
metode, tetapi adawithIsGetterVisibility
untuk mereka.setVisibilityChecker
sudah ditinggalkan. GunakansetVisibility
sebagai gantinya.Di Jackson 2.0 dan yang lebih baru, Anda cukup menggunakan:
untuk mematikan deteksi otomatis.
sumber
@JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
Selanjutnya, Anda harus memberi anotasi pada setiap properti yang ingin Anda sertakan dengan@JsonProperty
Khusus untuk
boolean is*()
getter:Saya telah menghabiskan banyak waktu untuk alasan mengapa tidak ada di bawah ini
atau ini
bekerja untuk Boolean Getter / Setter saya.
Solusinya sederhana:
UPDATE: spring-boot diizinkan konfigurasikan:
Lihat Properti aplikasi umum # JACKSON
sumber
untuk jackson 1.9.10 saya gunakan
untuk mematikan pemotongan otomatis.
sumber
Bagaimana dengan ini: Saya menggunakannya dengan mixin
objek tidak sesuai
Mixin:
Pemakaian:
Tidak ada yang mengatakan Anda tidak dapat melakukan prakiraan jumlah kelas dan menerapkan mixin yang sama.
Jika Anda tidak terbiasa dengan mixin, mereka secara konseptual sederhana: Struktur mixin super dipaksakan pada kelas target (menurut jackson, tidak sejauh yang menyangkut JVM).
sumber
Jika Anda ingin cara untuk melakukan ini secara global tanpa khawatir tentang konfigurasi Anda
ObjectMapper
, Anda dapat membuat anotasi sendiri:Sekarang Anda hanya perlu membubuhi keterangan kelas
@JsonExplicit
Anda dan Anda baik-baik saja!Pastikan juga untuk mengedit panggilan di atas
@JsonAutoDetect
untuk memastikan Anda memiliki nilai yang ditetapkan untuk apa yang bekerja dengan program Anda.Kredit untuk https://stackoverflow.com/a/13408807 untuk membantu saya mencari tahu
@JacksonAnnotationsInside
sumber
Jika Anda menggunakan Spring Boot, Anda dapat mengonfigurasi Jackson secara global sebagai berikut:
sumber