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.