Jackson - Arbejde med kort og nuller

1. Oversigt

I denne hurtige artikel vil vi se på en mere avanceret brugssag om brug Jackson - arbejder med Kort der indeholder nulværdier eller nulnøgler.

2. Ignorer nulværdier på et kort

Jackson har en enkel, men nyttig måde at globalt kontrollere, hvad der sker med nulværdier, når et kort bliver serieliseret:

ObjectMapper-kortlægger = ny ObjectMapper (); mapper.setSerializationInclusion (Inkluder.NON_NULL);

Nu vil enhver nulværdi i Map-objekt, der er serialiseret gennem denne mapper, blive ignoreret:

@Test offentlig ugyldighed givenIgnoringNullValuesInMap_whenWritingMapObjectWithNullValue_thenIgnored () kaster JsonProcessingException {ObjectMapper mapper = ny ObjectMapper (); mapper.setSerializationInclusion (Inkluder.NON_NULL); MyDto dtoObject1 = ny MyDto (); Kort dtoMap = nyt HashMap (); dtoMap.put ("dtoObject1", dtoObject1); dtoMap.put ("dtoObject2", null); String dtoMapAsString = mapper.writeValueAsString (dtoMap); assertThat (dtoMapAsString, containString ("dtoObject1")); assertThat (dtoMapAsString, ikke (indeholderString ("dtoObject2")); }

3. Serialisering af et kort med en nul nøgle

Som standard, Jackson tillader ikke serialisering af et kort med en nul-nøgle. Hvis du prøver at skrive et sådant kort ud, får du følgende undtagelse:

c.f.j.c.JsonGenerationException: Null nøgle til et kort er ikke tilladt i JSON (brug en konverterende NullKeySerializer?) på c.f.j.d.s.i.FailingSerializer.serialize (FailingSerializer.java:36)

Biblioteket er dog fleksibelt nok til, at du kan definere en brugerdefineret nul-nøgleserializer og tilsidesætte standardadfærden:

klasse MyDtoNullKeySerializer udvider StdSerializer {public MyDtoNullKeySerializer () {this (null); } offentlig MyDtoNullKeySerializer (klasse t) {super (t); } @Override public void serialize (Object nullKey, JsonGenerator jsonGenerator, SerializerProvider unused) kaster IOException, JsonProcessingException {jsonGenerator.writeFieldName (""); }}

Nu fungerer kortet med nul-nøglen fint - og nul-nøglen vil blive skrevet som en tom streng:

@Test offentlig ugyldighed givenAllowingMapObjectWithNullKey_whenWriting_thenCorrect () kaster JsonProcessingException {ObjectMapper mapper = ny ObjectMapper (); mapper.getSerializerProvider (). setNullKeySerializer (ny MyDtoNullKeySerializer ()); MyDto dtoObject = ny MyDto (); dtoObject.setStringValue ("dtoObjectString"); Kort dtoMap = nyt HashMap (); dtoMap.put (null, dtoObject); String dtoMapAsString = mapper.writeValueAsString (dtoMap); assertThat (dtoMapAsString, indeholderString ("\" \ "")); assertThat (dtoMapAsString, containString ("dtoObjectString")); }

4. Ignorer nulmarker

Udover Maps giver Jackson en masse konfiguration og fleksibilitet til ignorering / arbejde med nul felter generelt. Du kan tjekke denne vejledning for at se nøjagtigt, hvordan det fungerer.

5. Konklusion

Serialisering af et kortobjekt er almindeligt nok til, at vi har brug for et bibliotek, der er i stand til at håndtere nuancerne i serieiseringsprocessen godt. Jackson giver et par praktiske tilpasningsmuligheder, der hjælper dig med at forme output fra denne serieiseringsproces ganske godt.

Det giver også mange solide måder at arbejde med samlinger i en mere generel forstand.

Implementeringen af ​​alle disse eksempler og kodestykker kan findes i over på GitHub - dette er et Maven-baseret projekt, så det skal være let at importere og køre som det er.


$config[zx-auto] not found$config[zx-overlay] not found