Jackson - Arbeide med kart og null

1. Oversikt

I denne raske artikkelen skal vi se på et mer avansert brukstilfelle for bruk Jackson - jobber med Kart som inneholder nullverdier eller nulltaster.

2. Ignorer nullverdier i et kart

Jackson har en enkel, men nyttig måte å globalt kontrollere hva som skjer med nullverdier når et kart blir seriellisert:

ObjectMapper mapper = ny ObjectMapper (); mapper.setSerializationInclusion (Inkluder.NON_NULL);

Nå vil en nullverdi i kartobjekt som er seriell gjennom denne kartleggeren bli ignorert:

@Test offentlig tomrom gittIgnoringNullValuesInMap_whenWritingMapObjectWithNullValue_thenIgnored () kaster JsonProcessingException {ObjectMapper mapper = new ObjectMapper (); mapper.setSerializationInclusion (Inkluder.NON_NULL); MyDto dtoObject1 = ny MyDto (); Kart dtoMap = nytt HashMap (); dtoMap.put ("dtoObject1", dtoObject1); dtoMap.put ("dtoObject2", null); Streng dtoMapAsString = mapper.writeValueAsString (dtoMap); assertThat (dtoMapAsString, containString ("dtoObject1")); assertThat (dtoMapAsString, ikke (inneholderString ("dtoObject2"))); }

3. Serialisere et kart med en nullnøkkel

Som standard, Jackson tillater ikke serialisering av et kart med nullnøkkel. Hvis du prøver å skrive ut et slikt kart, får du følgende unntak:

c.f.j.c.JsonGenerationException: Null nøkkel for et kart som ikke er tillatt i JSON (bruk en konverterende NullKeySerializer?) på c.f.j.d.s.i.FailingSerializer.serialize (FailingSerializer.java:36)

Biblioteket er imidlertid fleksibelt nok til at du kan definere en tilpasset, nøkkel nøkkel serializer og overstyre standardadferd:

klasse MyDtoNullKeySerializer utvider 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 (""); }}

Nå fungerer kartet med nullnøkkelen helt fint - og nullnøkkelen vil bli skrevet som en tom streng:

@Test offentlig ugyldig givenAllowingMapObjectWithNullKey_whenWriting_thenCorrect () kaster JsonProcessingException {ObjectMapper mapper = new ObjectMapper (); mapper.getSerializerProvider (). setNullKeySerializer (ny MyDtoNullKeySerializer ()); MyDto dtoObject = ny MyDto (); dtoObject.setStringValue ("dtoObjectString"); Kart dtoMap = nytt HashMap (); dtoMap.put (null, dtoObject); Streng dtoMapAsString = mapper.writeValueAsString (dtoMap); assertThat (dtoMapAsString, containString ("\" \ "")); assertThat (dtoMapAsString, containString ("dtoObjectString")); }

4. Ignorer Null Fields

Foruten Maps, gir Jackson mye konfigurasjon og fleksibilitet for å ignorere / jobbe med null felt generelt. Du kan sjekke ut denne veiledningen for å se nøyaktig hvordan det fungerer.

5. Konklusjon

Serialisering av et kartobjekt er vanlig nok til at vi trenger et bibliotek som er i stand til å håndtere nyansene i serieiseringsprosessen. Jackson tilbyr noen praktiske tilpasningsalternativer for å hjelpe deg med å forme utdataene til denne serialiseringsprosessen ganske bra.

Det gir også mange solide måter å jobbe med samlinger i mer generell forstand.

Implementeringen av alle disse eksemplene og kodebiter kan du finne i over på GitHub - dette er et Maven-basert prosjekt, så det skal være enkelt å importere og kjøre som det er.


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