Jackson - Custom Serializer
1. Oversikt
Denne raske opplæringen viser hvordan du serierer en Java-enhet med Jackson 2 ved hjelp av en Tilpasset Serializer.
Hvis du vil grave dypere og lære andre kule ting du kan gjøre med Jackson 2 - gå videre til hovedveiledningen for Jackson.
2. Standard serialisering av en objektgraf
La oss definere to enkle enheter og se hvordan Jackson serialiserer disse uten noen tilpasset logikk:
public class User {public int id; offentlig streng navn; } public class Item {public int id; offentlig streng elementnavn; offentlig bruker eier; }
La oss nå serieisere en Punkt enhet med en Bruker enhet:
Item myItem = new Item (1, "theItem", new User (2, "theUser")); Streng seriell = ny ObjectMapper (). WriteValueAsString (myItem);
Dette vil resultere i en full JSON-representasjon for begge enhetene:
{"id": 1, "itemName": "theItem", "eier": {"id": 2, "name": "theUser"}}
3. Tilpasset Serializer på ObjectMapper
Nå, la oss forenkle JSON-utgangen ovenfor ved bare å serialisere id av Bruker, ikke hele Bruker gjenstand; vi vil gjerne få følgende, enklere JSON:
{"id": 25, "itemName": "FEDUfRgS", "eier": 15}
Enkelt sagt, vi må definere en egendefinert Serializer til Punkt gjenstander:
public class ItemSerializer utvider StdSerializer {public ItemSerializer () {this (null); } public ItemSerializer (klasse t) {super (t); } @ Override public void serialize (Item value, JsonGenerator jgen, SerializerProvider provider) kaster IOException, JsonProcessingException {jgen.writeStartObject (); jgen.writeNumberField ("id", value.id); jgen.writeStringField ("itemName", value.itemName); jgen.writeNumberField ("eier", value.owner.id); jgen.writeEndObject (); }}
Nå må vi registrere denne egendefinerte serialisereren med ObjectMapper for Punkt klasse, og utfør serialisasjonen:
Item myItem = new Item (1, "theItem", new User (2, "theUser")); ObjectMapper mapper = ny ObjectMapper (); SimpleModule-modul = ny SimpleModule (); module.addSerializer (Item.class, new ItemSerializer ()); mapper.registerModule (modul); Streng seriell = mapper.writeValueAsString (myItem);
Det er det - vi har nå en enklere, tilpasset JSON-serialisering av Vare-> Bruker enheter.
4. Tilpasset Serializer på klassen
Vi kan også registrer serialisereren direkte på klassen, i stedet for på ObjectMapper:
@JsonSerialize (ved hjelp av = ItemSerializer.class) public class Item {...}
Nå når du opptrer standard serialisering:
Item myItem = new Item (1, "theItem", new User (2, "theUser")); Streng seriell = ny ObjectMapper (). WriteValueAsString (myItem);
Vi får den tilpassede JSON-utgangen, opprettet av serializer, spesifisert via @JsonSerialize:
{"id": 25, "itemName": "FEDUfRgS", "eier": 15}
Dette er nyttig når ObjectMapper kan ikke nås og konfigureres direkte.
5. Konklusjon
Denne artikkelen illustrerte hvordan du kommer til en tilpasset JSON-utgang med Jackson 2 ved å bruke Serializers.
Implementeringen av alle disse eksemplene og kodebiter kan du finne på GitHub - dette er et Maven-basert prosjekt, så det skal være enkelt å importere og kjøre som det er.