Bagaimana Jackson dapat dikonfigurasi untuk mengabaikan nilai bidang selama serialisasi jika nilai bidang itu nol.
Sebagai contoh:
public class SomeClass {
// what jackson annotation causes jackson to skip over this value if it is null but will
// serialize it otherwise
private String someValue;
}
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
:; entah bagaimana anotasi Anda tidak tersedia.@JsonInclude
notasi tidak berfungsi, tetapi ini berfungsi seperti pesona:@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
(Saya menggunakan Jackson 1.9.12 dengan Spring 3.2.2.)@JsonSerialize
sintaks ke@JsonInclude
. Sintaks yang lebih lama tidak digunakan lagi.Dengan Jackson> 1.9.11 dan <2.x gunakan
@JsonSerialize
anotasi untuk melakukan itu:@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
sumber
@JsonSerialize(using = FooSerializer.class, include = JsonSerialize.Inclusion.NON_NULL)
tidak bekerja nilai nullable diserialisasi.Hanya untuk memperluas jawaban lain - jika Anda perlu mengontrol kelalaian nilai nol pada basis per-bidang, beri anotasi bidang yang dimaksud (atau anotasi 'pengambil' bidang tersebut).
contoh - di sini hanya
fieldOne
akan dinonaktifkan dari json jika itu nol.fieldTwo
akan selalu disertakan terlepas dari apakah itu nol.Untuk menghilangkan semua nilai nol di kelas sebagai default, beri catatan kelas. Anotasi per bidang / pengambil masih dapat digunakan untuk menimpa default ini jika perlu.
contoh - di sini
fieldOne
danfieldTwo
akan dihapus dari json jika masing-masing adalah nol, karena ini adalah default yang ditetapkan oleh anotasi kelas.fieldThree
Namun akan menimpa default dan akan selalu dimasukkan, karena penjelasan di lapangan.MEMPERBARUI
Di atas adalah untuk Jackson 2 . Untuk versi Jackson sebelumnya, Anda perlu menggunakan:
dari pada
Jika pembaruan ini bermanfaat, harap jawab jawaban ZiglioUK di bawah ini, ini menunjukkan anotasi Jackson 2 yang baru jauh sebelum saya memperbarui jawaban saya untuk menggunakannya!
sumber
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
sudah ditinggalkanDi Jackson 2.x, gunakan:
sumber
com.fasterxml.jackson.annotation
- Jackson 1.x hadorg.codehaus.jackson.annoation
Anda dapat menggunakan konfigurasi mapper berikut:
Sejak 2,5 Anda dapat pengguna:
sumber
getSerializationConfig()
mengatakan:Note that since instances are immutable, you can NOT change settings by accessing an instance and calling methods: this will simply create new instance of config object.
mapper.setSerializationInclusion(Include.NON_NULL);
Anda dapat mengatur
application.properties
:atau
application.yaml
:http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
sumber
dalam hal ini
membuatnya bekerja.
sumber
{ }
untuk null, yang tanpa tujuan mentransfer idiom Java ke konsumen. sama dengan AtomicReference - konsumen tidak peduli bagaimana pengembang memilih untuk menegakkan keamanan utas pada representasi internal dari respons.harus bekerja.
Include.NON_EMPTY
menunjukkan bahwa properti diserialisasi jika nilainya tidak nol dan tidak kosong.Include.NON_NULL
menunjukkan bahwa properti diserialisasi jika nilainya tidak nol.sumber
JsonInclude.Include.NON_EMPTY
- sudah cukup karena mencakup kasus NOT_NULLJika Anda ingin menambahkan aturan ini ke semua model di Jackson 2.6+ gunakan:
sumber
Jika di Spring Boot , Anda dapat menyesuaikan jackson
ObjectMapper
secara langsung melalui file properti.Contoh
application.yml
:Nilai yang mungkin adalah:
Lebih lanjut: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper
sumber
Ini akan bekerja di Spring boot 2.0.3+ dan Jackson 2.0+
sumber
@JsonInclude(JsonInclude.Include.NON_NULL)
bagi saya pada boot Musim Semi 2.1.2 dan anotasi Jackson 2.9.0Untuk penggunaan Jackson 2.5:
sumber
Ini telah mengganggu saya selama beberapa waktu dan akhirnya saya menemukan masalahnya. Masalahnya adalah karena impor yang salah. Sebelumnya saya telah menggunakan
Yang sudah usang. Cukup ganti impor dengan
dan gunakan sebagai
sumber
Konfigurasi global jika Anda menggunakan Spring
sumber
public Jackson2ObjectMapperBuilder serializationInclusion(JsonInclude.Include serializationInclusion) { this.serializationInclusion = serializationInclusion; return this; }
; Seseorang harus menggunakan radius enumerasi inklusi yang lebih besar. mis. NON_ABSENT termasuk NON_NULL dan NON_EMPTY termasuk keduanya. Karena itu, seharusnya hanyabuilder.serializationInclusion(JsonInclude.Include.NON_EMPTY);
JacksonInclude docJika Anda mencoba membuat serial daftar objek dan salah satunya adalah nol, Anda akan berakhir dengan memasukkan item nol di JSON bahkan dengan
akan menghasilkan:
untuk mendapatkan ini:
seseorang dapat melakukan sesuatu seperti:
TIP: Jika Anda menggunakan DropWizard, Anda dapat mengambil yang
ObjectMapper
sedang digunakan oleh Jersey menggunakanenvironment.getObjectMapper()
sumber
Kami memiliki banyak jawaban untuk pertanyaan ini. Jawaban ini mungkin membantu dalam beberapa skenario. Jika Anda ingin mengabaikan nilai nol, Anda dapat menggunakan NOT_NULL di tingkat kelas. seperti di bawah ini
Beberapa kali Anda mungkin perlu mengabaikan nilai kosong seperti Anda mungkin telah menginisialisasi arrayList tetapi tidak ada elemen dalam daftar itu. Pada waktu itu menggunakan NOT_EMPTY anotasi untuk mengabaikan bidang nilai kosong itu
sumber
Jackson 2.x + digunakan
sumber
.withSerializationInclusion(JsonInclude.Include.NON_NULL)
bukan kan?getSerializationConfig()
mengatakan:Note that since instances are immutable, you can NOT change settings by accessing an instance and calling methods: this will simply create new instance of config object.
Juga, Anda harus mengubah pendekatan Anda saat menggunakan Map myVariable seperti yang dijelaskan dalam dokumentasi untuk menghilangkan nulls:
sumber
Kasus satu
Kasus dua
Jika
someString
nol, itu akan diabaikan pada kedua kasus. JikasomeString
"" itu hanya diabaikan pada kasus dua.Hal yang sama untuk
List = null
atauList.size() = 0
sumber