Ignorer Null Fields med Jackson
1. Oversikt
Denne raske opplæringen skal dekke hvordan du konfigurerer Jackson å ignorere nullfelt når de serielliseres en java-klasse.
Hvis du vil grave dypere og lære andre kule ting, kan du gjøre med Jackson 2 - gå videre til hovedveiledningen for Jackson.
2. Ignorer nullfelt på klassen
Jackson tillater å kontrollere denne oppførselen på klassens nivå:
@JsonInclude (Include.NON_NULL) offentlig klasse MyDto {...}
Eller - mer detaljert - på feltnivå:
offentlig klasse MyDto {@JsonInclude (Include.NON_NULL) private String stringValue; privat intValue; // standard getters og setters}
Nå skal vi kunne teste det null verdier er faktisk ikke en del av den endelige JSON-utgangen:
@Test offentlig ugyldighet givenNullsIgnoredOnClass_whenWritingObjectWithNullField_thenIgnored () kaster JsonProcessingException {ObjectMapper mapper = new ObjectMapper (); MyDto dtoObject = ny MyDto (); Streng dtoAsString = mapper.writeValueAsString (dtoObject); assertThat (dtoAsString, containString ("intValue")); assertThat (dtoAsString, ikke (inneholderString ("stringValue"))); }
3. Ignorer nullfelt globalt
Jackson tillater også konfigurere denne oppførselen globalt på ObjectMapper:
mapper.setSerializationInclusion (Inkluder.NON_NULL);
Nå noen null felt i en hvilken som helst klasse seriell gjennom denne kartleggeren kommer til å bli ignorert:
@Test offentlig ugyldighet givenNullsIgnoredGlobally_whenWritingObjectWithNullField_thenIgnored () kaster JsonProcessingException {ObjectMapper mapper = new ObjectMapper (); mapper.setSerializationInclusion (Inkluder.NON_NULL); MyDto dtoObject = ny MyDto (); Streng dtoAsString = mapper.writeValueAsString (dtoObject); assertThat (dtoAsString, containString ("intValue")); assertThat (dtoAsString, containString ("booleanValue")); assertThat (dtoAsString, ikke (inneholderString ("stringValue"))); }
4. Konklusjon
Ignorer null felt er en så vanlig Jackson-konfigurasjon fordi det ofte er slik at vi trenger å ha bedre kontroll over JSON-utgangen. Denne artikkelen viser hvordan du gjør det for klasser. Det er imidlertid mer avanserte brukstilfeller, for eksempel å ignorere nullverdier når du serialiserer et kart.
Implementeringen av alle disse eksemplene og kodebiter finner du i Github-prosjektet mitt.