Zanemari Null Fields s Jacksonom

1. Pregled

Ovaj kratki vodič opisat će kako se postavlja Jackson da zanemari nulta polja prilikom serializacije tečaj jave.

Ako želite dublje kopati i naučiti druge cool stvari koje možete učiniti s Jacksonom 2 - krenite u glavni Jacksonov tutorial.

2. Zanemari null polja na klasi

Jackson omogućuje kontrolu ovog ponašanja na bilo kojoj razini razreda:

@JsonInclude (Include.NON_NULL) javna klasa MyDto {...}

Ili - detaljnije - na razini polja:

javna klasa MyDto {@JsonInclude (Include.NON_NULL) private String stringValue; private int intValue; // standardni geteri i postavljači}

Sad bismo to trebali moći testirati null vrijednosti doista nisu dio konačnog JSON izlaza:

@Test javna praznina givenNullsIgnoredOnClass_whenWritingObjectWithNullField_thenIgnored () baca JsonProcessingException {ObjectMapper mapper = new ObjectMapper (); MyDto dtoObject = novo MyDto (); Niz dtoAsString = mapper.writeValueAsString (dtoObject); assertThat (dtoAsString, containsString ("intValue")); assertThat (dtoAsString, ne (sadržiString ("stringValue"))); }

3. Zanemarite null polja globalno

Jackson također dopušta globalno konfiguriranje ovog ponašanja na ObjectMapper:

mapper.setSerializationInclusion (Uključi.NON_NULL);

Sad bilo koji null polje u bilo kojoj klasi serializiranoj kroz ovo mapiranje bit će zanemareno:

@Test javna praznina givenNullsIgnoredGlobally_whenWritingObjectWithNullField_thenIgnored () baca JsonProcessingException {ObjectMapper mapper = new ObjectMapper (); mapper.setSerializationInclusion (Uključi.NON_NULL); MyDto dtoObject = novo MyDto (); Niz dtoAsString = mapper.writeValueAsString (dtoObject); assertThat (dtoAsString, containsString ("intValue")); assertThat (dtoAsString, containsString ("booleanValue")); assertThat (dtoAsString, ne (sadržiString ("stringValue"))); }

4. Zaključak

Ne obazirući se null fields tako je uobičajena Jackson konfiguracija jer često imamo potrebu da imamo bolju kontrolu nad JSON izlazom. Ovaj članak pokazuje kako to učiniti na nastavi. Postoje, međutim, napredniji slučajevi upotrebe, poput ignoriranja null vrijednosti prilikom serializacije karte.

Implementacija svih ovih primjera i isječaka koda mogu se naći u mom projektu Github.