Jackson - Térképekkel és nullákkal való munka

1. Áttekintés

Ebben a rövid cikkben egy fejlettebb használati esetet fogunk megvizsgálni Jackson - dolgozik együtt Térképek amelyek null értékeket vagy null kulcsokat tartalmaznak.

2. Hagyja figyelmen kívül a Nulls Értékeket a térképen

Jacksonnak egyszerű, de hasznos módja van annak globális ellenőrzésére, hogy mi történik a null értékekkel, amikor a térkép sorosodik:

ObjectMapper mapper = új ObjectMapper (); mapper.setSerializationInclusion (Include.NON_NULL);

Most a térképobjektumon keresztül, amely ezen a leképezőn keresztül szerializált, minden null értéket figyelmen kívül hagyunk:

@Test public void givenIgnoringNullValuesInMap_whenWritingMapObjectWithNullValue_thenIgnored () dobja a JsonProcessingException {ObjectMapper mapper = új ObjectMapper (); mapper.setSerializationInclusion (Include.NON_NULL); MyDto dtoObject1 = új MyDto (); Map dtoMap = új HashMap (); dtoMap.put ("dtoObject1", dtoObject1); dtoMap.put ("dtoObject2", null); Karakterlánc dtoMapAsString = mapper.writeValueAsString (dtoMap); assertThat (dtoMapAsString, tartalmazzaString ("dtoObject1")); assertThat (dtoMapAsString, nem (tartalmazzaString ("dtoObject2"))); }

3. Térkép sorosítása nullakulccsal

Alapértelmezés szerint, Jackson nem engedélyezi a Térkép sorosítását nullkulccsal. Ha mégis megpróbál ilyen térképet kiírni, akkor a következő kivételt kapja:

c.f.j.c.JsonGenerationException: A JSON-ban nem engedélyezett Null-kulcs egy térképhez (használjon konvertáló NullKeySerializer-t?) A c.f.j.d.s.i.FailingSerializer.serialize (FailingSerializer.java:36)

A könyvtár azonban elég rugalmas ahhoz, hogy meghatározhassa egy egyedi, nullkulcsos sorosító és felülírja az alapértelmezett viselkedést:

class MyDtoNullKeySerializer kiterjeszti a StdSerializer {public MyDtoNullKeySerializer () {this (null); } public MyDtoNullKeySerializer (t osztály) {super (t); } @Orride public void serialize (Object nullKey, JsonGenerator jsonGenerator, SerializerProvider unused) dobja az IOException, JsonProcessingException {jsonGenerator.writeFieldName (""); }}

Most a null kulcsú Térkép remekül fog működni - és a null kulcsot üres karakterláncként írjuk:

@Test public void givenAllowingMapObjectWithNullKey_whenWriting_thenCorrect () dobja a JsonProcessingException {ObjectMapper mapper = új ObjectMapper (); mapper.getSerializerProvider (). setNullKeySerializer (új MyDtoNullKeySerializer ()); MyDto dtoObject = new MyDto (); dtoObject.setStringValue ("dtoObjectString"); Map dtoMap = új HashMap (); dtoMap.put (null, dtoObject); Karakterlánc dtoMapAsString = mapper.writeValueAsString (dtoMap); assertThat (dtoMapAsString, tartalmazzaString ("\" \ "")); assertThat (dtoMapAsString, tartalmazzaString ("dtoObjectString")); }

4. Hagyja figyelmen kívül a Null mezőket

A Maps mellett Jackson sok konfigurációt és rugalmasságot biztosít a figyelmen kívül hagyáshoz / a munkához nulla mezők általában. Megtekintheti ezt az oktatóanyagot, hogy megtudja, pontosan hogyan működik.

5. Következtetés

A Map objektum serializálása elég gyakori ahhoz, hogy szükségünk legyen egy olyan könyvtárra, amely képes a sorosítási folyamat árnyalatait jól kezelni. Jackson néhány praktikus testreszabási lehetőséget kínál, amelyek segítségével a sorosítási folyamat kimenete elég jól formálható.

Sok általános módszert kínál a gyűjteményekkel való együttműködéshez.

Mindezen példák és kódrészletek megvalósítása megtalálható a GitHub oldalán - ez egy Maven-alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.