Jackson - Práca s mapami a nulovými hodnotami

1. Prehľad

V tomto rýchlom článku sa pozrieme na pokročilejšie prípady použitia Jackson - spolupráca s Mapy ktoré obsahujú nulové hodnoty alebo nulové kľúče.

2. Ignorujte nulové hodnoty na mape

Jackson má jednoduchý, ale užitočný spôsob globálneho riadenia toho, čo sa stane s nulovými hodnotami, keď sa mapa serializuje:

ObjectMapper mapovač = nový ObjectMapper (); mapper.setSerializationInclusion (Include.NON_NULL);

Teraz bude akákoľvek nulová hodnota v objekte Map serializovaná prostredníctvom tohto mapovača ignorovaná:

@Test public void givenIgnoringNullValuesInMap_whenWritingMapObjectWithNullValue_thenIgnored () hodí JsonProcessingException {ObjectMapper mapper = nový ObjectMapper (); mapper.setSerializationInclusion (Include.NON_NULL); MyDto dtoObject1 = nový MyDto (); Mapa dtoMap = nový HashMap (); dtoMap.put ("dtoObject1", dtoObject1); dtoMap.put ("dtoObject2", null); Reťazec dtoMapAsString = mapper.writeValueAsString (dtoMap); assertThat (dtoMapAsString, containsString ("dtoObject1")); assertThat (dtoMapAsString, nie (containsString ("dtoObject2"))); }

3. Serializácia mapy pomocou nulového kľúča

Predvolene, Jackson neumožňuje serializáciu mapy s nulovým kľúčom. Ak sa pokúsite takúto mapu napísať, dostanete nasledujúcu výnimku:

c.f.j.c.JsonGenerationException: Null kľúč pre mapu nie je povolený v JSON (použiť konvertujúci NullKeySerializer?) na c.f.j.d.s.i.FailingSerializer.serialize (FailingSerializer.java:36)

Knižnica je však dostatočne flexibilná, aby ste ju mohli definovať vlastný serializátor s nulovým kľúčom a prepíše predvolené správanie:

class MyDtoNullKeySerializer extends StdSerializer {public MyDtoNullKeySerializer () {this (null); } public MyDtoNullKeySerializer (trieda t) {super (t); } @Override public void serialize (Object nullKey, JsonGenerator jsonGenerator, SerializerProvider unused) vrhá IOException, JsonProcessingException {jsonGenerator.writeFieldName (""); }}

Teraz bude Mapa s nulovým kľúčom fungovať dobre - a nulový kľúč bude zapísaný ako prázdny reťazec:

@Test public void givenAllowingMapObjectWithNullKey_whenWriting_thenCorrect () hodí JsonProcessingException {ObjectMapper mapper = new ObjectMapper (); mapper.getSerializerProvider (). setNullKeySerializer (nový MyDtoNullKeySerializer ()); MyDto dtoObject = nový MyDto (); dtoObject.setStringValue ("dtoObjectString"); Mapa dtoMap = nový HashMap (); dtoMap.put (null, dtoObject); Reťazec dtoMapAsString = mapper.writeValueAsString (dtoMap); assertThat (dtoMapAsString, containsString ("\" \ "")); assertThat (dtoMapAsString, containsString ("dtoObjectString")); }

4. Ignorujte nulové polia

Okrem aplikácie Mapy poskytuje Jackson veľkú konfiguráciu a flexibilitu pri ignorovaní alebo práci s nimi nulový poliach všeobecne. Môžete sa pozrieť na tento návod, aby ste videli, ako to presne funguje.

5. Záver

Serializácia objektu Map je natoľko bežná, že potrebujeme knižnicu, ktorá je schopná dobre zvládnuť nuansy procesu serializácie. Jackson poskytuje niekoľko užitočných možností prispôsobenia, ktoré vám pomôžu celkom dobre formovať výstup tohto procesu serializácie.

Poskytuje tiež veľa pevných spôsobov práce so zbierkami vo všeobecnejšom zmysle.

Implementácia všetkých týchto príkladov a útržkov kódu nájdete viac na GitHub - toto je projekt založený na Maven, takže by malo byť ľahké ho importovať a spustiť tak, ako je.


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