Jackson - Custom Serializer
1. Oversigt
Denne hurtige vejledning viser, hvordan man serialiserer en Java-enhed med Jackson 2 ved hjælp af en Custom Serializer.
Hvis du vil grave dybere og lære andre seje ting, du kan gøre med Jackson 2 - gå videre til den vigtigste Jackson-tutorial.
2. Standard serialisering af en objektgraf
Lad os definere 2 enkle enheder og se, hvordan Jackson serialiserer disse uden nogen brugerdefineret logik:
public class User {public int id; offentligt strengnavn; } public class Item {public int id; public String itemName; offentlig Bruger ejer; }
Lad os nu serialisere en Vare enhed med en Bruger enhed:
Item myItem = new Item (1, "theItem", new User (2, "theUser")); Streng seriel = ny ObjectMapper (). WriteValueAsString (myItem);
Dette vil resultere i en fuld JSON-repræsentation for begge enheder:
{"id": 1, "itemName": "theItem", "ejer": {"id": 2, "name": "theUser"}}
3. Custom Serializer på ObjectMapper
Nu, lad os forenkle JSON-output ovenfor ved kun at serialisere id af Bruger, ikke hele Bruger objekt; vi vil gerne have følgende, enklere JSON:
{"id": 25, "itemName": "FEDUfRgS", "ejer": 15}
Kort sagt, vi bliver nødt til det definere en brugerdefineret Serializer til Vare genstande:
public class ItemSerializer udvider StdSerializer {public ItemSerializer () {this (null); } offentlig ItemSerializer (klasse t) {super (t); } @Override public void serialize (Item value, JsonGenerator jgen, SerializerProvider provider) kaster IOException, JsonProcessingException {jgen.writeStartObject (); jgen.writeNumberField ("id", værdi.id); jgen.writeStringField ("itemName", value.itemName); jgen.writeNumberField ("ejer", value.owner.id); jgen.writeEndObject (); }}
Nu skal vi registrere denne brugerdefinerede serializer med ObjectMapper til Vare klasse og udføre serialisering:
Item myItem = new Item (1, "theItem", new User (2, "theUser")); ObjectMapper-kortlægger = ny ObjectMapper (); SimpleModule-modul = nyt SimpleModule (); module.addSerializer (Item.class, ny ItemSerializer ()); mapper.registerModule (modul); Streng seriel = mapper.writeValueAsString (myItem);
Det er det - vi har nu en enklere, brugerdefineret JSON-serialisering af Vare-> Bruger enheder.
4. Custom Serializer på klassen
Det kan vi også registrer serializer direkte på klassen, i stedet for på ObjectMapper:
@JsonSerialize (ved hjælp af = ItemSerializer.class) public class Item {...}
Nu, når du optræder standard serialisering:
Item myItem = new Item (1, "theItem", new User (2, "theUser")); Streng seriel = ny ObjectMapper (). WriteValueAsString (myItem);
Vi får den tilpassede JSON-output, oprettet af serializer, specificeret via @JsonSerialize:
{"id": 25, "itemName": "FEDUfRgS", "ejer": 15}
Dette er nyttigt, når ObjectMapper kan ikke tilgås og konfigureres direkte.
5. Konklusion
Denne artikel illustrerede, hvordan man kommer til et tilpasset JSON-output med Jackson 2 ved hjælp af Serializers.
Implementeringen af alle disse eksempler og kodestykker kan findes på GitHub - dette er et Maven-baseret projekt, så det skal være let at importere og køre som det er.