Jackson - Werken met kaarten en null-waarden

1. Overzicht

In dit korte artikel gaan we kijken naar een meer geavanceerde use-case van gebruik Jackson - werken met Kaarten die null-waarden of null-sleutels bevatten.

2. Negeer null-waarden in een kaart

Jackson heeft een eenvoudige maar nuttige manier om globaal te bepalen wat er gebeurt met null-waarden wanneer een kaart wordt geserialiseerd:

ObjectMapper-mapper = nieuwe ObjectMapper (); mapper.setSerializationInclusion (Inclusief.NON_NULL);

Nu wordt elke null-waarde in Map-object geserialiseerd via deze mapper genegeerd:

@Test openbare ongeldige gegevenIgnoringNullValuesInMap_whenWritingMapObjectWithNullValue_thenIgnored () gooit JsonProcessingException {ObjectMapper mapper = new ObjectMapper (); mapper.setSerializationInclusion (Inclusief.NON_NULL); MyDto dtoObject1 = nieuwe MyDto (); Map dtoMap = nieuwe HashMap (); dtoMap.put ("dtoObject1", dtoObject1); dtoMap.put ("dtoObject2", null); String dtoMapAsString = mapper.writeValueAsString (dtoMap); assertThat (dtoMapAsString, bevatString ("dtoObject1")); assertThat (dtoMapAsString, not (containsString ("dtoObject2"))); }

3. Een kaart serialiseren met een null-sleutel

Standaard, Jackson staat de serialisering van een kaart met een null-sleutel niet toe. Als je zo'n kaart probeert uit te schrijven, krijg je de volgende uitzondering:

c.f.j.c.JsonGenerationException: Null-sleutel voor een kaart die niet is toegestaan ​​in JSON (gebruik een converterende NullKeySerializer?) op c.f.j.d.s.i.FailingSerializer.serialize (FailingSerializer.java:36)

De bibliotheek is echter flexibel genoeg om te definiëren een aangepaste serialisator met null-sleutels en overschrijf het standaardgedrag:

klasse MyDtoNullKeySerializer breidt StdSerializer uit {openbare MyDtoNullKeySerializer () {dit (null); } openbare MyDtoNullKeySerializer (Klasse t) {super (t); } @Override public void serialize (Object nullKey, JsonGenerator jsonGenerator, SerializerProvider ongebruikt) genereert IOException, JsonProcessingException {jsonGenerator.writeFieldName (""); }}

Nu werkt de kaart met de null-sleutel prima - en de null-sleutel wordt geschreven als een lege string:

@Test openbare leegte gegevenAllowingMapObjectWithNullKey_whenWriting_thenCorrect () gooit JsonProcessingException {ObjectMapper mapper = new ObjectMapper (); mapper.getSerializerProvider (). setNullKeySerializer (nieuwe MyDtoNullKeySerializer ()); MyDto dtoObject = nieuwe MyDto (); dtoObject.setStringValue ("dtoObjectString"); Map dtoMap = nieuwe HashMap (); dtoMap.put (null, dtoObject); String dtoMapAsString = mapper.writeValueAsString (dtoMap); assertThat (dtoMapAsString, bevatString ("\" \ "")); assertThat (dtoMapAsString, bevatString ("dtoObjectString")); }

4. Negeer null-velden

Naast Maps biedt Jackson veel configuratie en flexibiliteit om te negeren / ermee te werken nul velden in het algemeen. Je kunt deze tutorial bekijken om precies te zien hoe dat werkt.

5. Conclusie

Het serialiseren van een kaartobject is zo gebruikelijk dat we een bibliotheek nodig hebben die de nuances van het serialiseringsproces goed aankan. Jackson biedt een paar handige aanpassingsopties om u te helpen de output van dit serialisatieproces goed vorm te geven.

Het biedt ook veel solide manieren om in meer algemene zin met collecties te werken.

De implementatie van al deze voorbeelden en codefragmenten is te vinden in meer dan op GitHub - dit is een op Maven gebaseerd project, dus het zou gemakkelijk moeten kunnen worden geïmporteerd en uitgevoerd zoals het is.


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