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.


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