Abaikan Null Fields dengan Jackson

1. Gambaran keseluruhan

Tutorial ringkas ini akan merangkumi cara menyiapkan Jackson untuk mengabaikan bidang kosong ketika membuat siri kelas java.

Sekiranya anda ingin menggali lebih mendalam dan mengetahui perkara menarik lain yang boleh anda lakukan dengan Jackson 2 - teruskan ke tutorial utama Jackson.

2. Abaikan Medan Null di Kelas

Jackson membenarkan mengawal tingkah laku ini di peringkat kelas:

@JsonInclude(Include.NON_NULL) public class MyDto { ... }

Atau - lebih terperinci - di peringkat lapangan:

public class MyDto { @JsonInclude(Include.NON_NULL) private String stringValue; private int intValue; // standard getters and setters }

Sekarang, kita harus dapat menguji bahawa nilai nol sememangnya bukan sebahagian daripada output JSON akhir:

@Test public void givenNullsIgnoredOnClass_whenWritingObjectWithNullField_thenIgnored() throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); MyDto dtoObject = new MyDto(); String dtoAsString = mapper.writeValueAsString(dtoObject); assertThat(dtoAsString, containsString("intValue")); assertThat(dtoAsString, not(containsString("stringValue"))); }

3. Abaikan Null Fields di peringkat global

Jackson juga membenarkan mengkonfigurasi tingkah laku ini secara global pada ObjectMapper :

mapper.setSerializationInclusion(Include.NON_NULL);

Sekarang mana-mana bidang kosong di kelas mana pun yang bersiri melalui mapper ini akan diabaikan:

@Test public void givenNullsIgnoredGlobally_whenWritingObjectWithNullField_thenIgnored() throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(Include.NON_NULL); MyDto dtoObject = new MyDto(); String dtoAsString = mapper.writeValueAsString(dtoObject); assertThat(dtoAsString, containsString("intValue")); assertThat(dtoAsString, containsString("booleanValue")); assertThat(dtoAsString, not(containsString("stringValue"))); }

4. Kesimpulan

Mengabaikan medan kosong adalah konfigurasi Jackson yang biasa kerana selalunya kita perlu mempunyai kawalan yang lebih baik terhadap output JSON. Artikel ini menunjukkan cara melakukannya untuk kelas. Walau bagaimanapun, terdapat kes penggunaan yang lebih maju, seperti mengabaikan nilai nol ketika menyusun Peta.

Pelaksanaan semua contoh dan coretan kod ini terdapat di projek Github saya.