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.


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