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.