Jackson - Aangepaste Serializer

1. Overzicht

Deze korte tutorial laat zien hoe je een Java-entiteit kunt serialiseren met Jackson 2 met behulp van een Aangepaste serialisator.

Als je dieper wilt graven en leren andere coole dingen die je kunt doen met de Jackson 2 - ga naar de belangrijkste Jackson-tutorial.

2. Standaardserialisering van een objectgrafiek

Laten we twee eenvoudige entiteiten definiëren en zien hoe Jackson deze serialiseert zonder enige aangepaste logica:

openbare klasse Gebruiker {openbare int id; public String naam; } public class Item {public int id; openbare String itemName; openbare gebruiker eigenaar; }

Laten we nu een Item entiteit met een Gebruiker entiteit:

Item myItem = nieuw item (1, "theItem", nieuwe gebruiker (2, "theUser")); String geserialiseerd = nieuwe ObjectMapper (). WriteValueAsString (myItem);

Dit resulteert in een volledige JSON-weergave voor beide entiteiten:

{"id": 1, "itemName": "theItem", "owner": {"id": 2, "name": "theUser"}}

3. Custom Serializer op het ObjectMapper

Nu, laten we de JSON-uitvoer vereenvoudigen hierboven door alleen de ID kaart van de Gebruiker, niet het hele Gebruiker voorwerp; we zouden graag de volgende, eenvoudigere JSON willen krijgen:

{"id": 25, "itemName": "FEDUfRgS", "owner": 15}

Simpel gezegd, we zullen moeten definieer een aangepaste Serializer voor Item voorwerpen:

openbare klasse ItemSerializer breidt StdSerializer {openbare ItemSerializer () {dit (null) uit; } openbare ItemSerializer (Klasse t) {super (t); } @Override public void serialize (Itemwaarde, JsonGenerator jgen, SerializerProvider provider) gooit IOException, JsonProcessingException {jgen.writeStartObject (); jgen.writeNumberField ("id", waarde.id); jgen.writeStringField ("itemName", value.itemName); jgen.writeNumberField ("eigenaar", waarde.owner.id); jgen.writeEndObject (); }}

Nu moeten we deze aangepaste serialisator registreren met de ObjectMapper voor de Item class, en voer de serialisering uit:

Item myItem = nieuw item (1, "theItem", nieuwe gebruiker (2, "theUser")); ObjectMapper-mapper = nieuwe ObjectMapper (); SimpleModule module = nieuwe SimpleModule (); module.addSerializer (Item.class, nieuwe ItemSerializer ()); mapper.registerModule (module); String geserialiseerd = mapper.writeValueAsString (myItem);

Dat is alles - we hebben nu een eenvoudigere, aangepaste JSON-serialisering van het Item-> Gebruiker entiteiten.

4. Custom Serializer op de klasse

We kunnen ook registreer de serialisator rechtstreeks in de klas, in plaats van op de ObjectMapper:

@JsonSerialize (using = ItemSerializer.class) openbare klasse Item {...}

Nu, bij het optreden standaard serialisering:

Item myItem = nieuw item (1, "theItem", nieuwe gebruiker (2, "theUser")); String geserialiseerd = nieuwe ObjectMapper (). WriteValueAsString (myItem);

We krijgen de aangepaste JSON-uitvoer, gemaakt door de serialisator, gespecificeerd via @JsonSerialize:

{"id": 25, "itemName": "FEDUfRgS", "owner": 15}

Dit is handig als het ObjectMapper kan niet rechtstreeks worden geopend en geconfigureerd.

5. Conclusie

In dit artikel wordt geïllustreerd hoe u met Jackson 2 tot een aangepaste JSON-uitvoer kunt komen door Serializers te gebruiken.

De implementatie van al deze voorbeelden en codefragmenten is te vinden 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