Jackson - Prilagođeni serilizator

1. Pregled

Ovaj brzi vodič pokazat će kako serializirati Java entitet s Jackson 2 pomoću a Prilagođeni serilizator.

Ako želite dublje kopati i učiti druge cool stvari koje možete raditi s Jacksonom 2 - krenite prema glavnom Jacksonovom vodiču.

2. Standardna serializacija grafikona predmeta

Idemo definirati 2 jednostavna entiteta i vidjeti kako ih Jackson serializira bez ikakve prilagođene logike:

javni razred korisnika {javni int id; naziv javnog niza; } predmet javne klase {public int id; public String itemName; javni korisnik; }

Ajmo sada serializirati Artikal entitet sa Korisnik entitet:

Stavka myItem = nova stavka (1, "theItem", novi korisnik (2, "theUser")); Niz serializiran = novi ObjectMapper (). WriteValueAsString (myItem);

To će rezultirati potpunim JSON predstavljanjem za oba entiteta:

{"id": 1, "itemName": "theItem", "owner": {"id": 2, "name": "theUser"}}

3. Prilagođeni serilizator na ObjectMapper

Sada, pojednostavnimo JSON izlaz gore samo serializacijom iskaznica od Korisnik, ne cijelu Korisnik objekt; željeli bismo dobiti sljedeći, jednostavniji JSON:

{"id": 25, "itemName": "FEDUfRgS", "owner": 15}

Jednostavno rečeno, morat ćemo definirajte prilagođeni serilizator za Artikal objekti:

javna klasa ItemSerializer proširuje StdSerializer {public ItemSerializer () {this (null); } javni ItemSerializer (klasa t) {super (t); } @Override public void serialize (vrijednost predmeta, JsonGenerator jgen, dobavljač SerializerProvider) baca IOException, JsonProcessingException {jgen.writeStartObject (); jgen.writeNumberField ("id", value.id); jgen.writeStringField ("itemName", value.itemName); jgen.writeNumberField ("vlasnik", value.owner.id); jgen.writeEndObject (); }}

Sada moramo registrirati ovaj prilagođeni serializator kod ObjectMapper za Artikal klase i izvršite serializaciju:

Stavka myItem = nova stavka (1, "theItem", novi korisnik (2, "theUser")); Mapa ObjectMapper = novi ObjectMapper (); Modul SimpleModule = novi SimpleModule (); module.addSerializer (Item.class, novi ItemSerializer ()); mapper.registerModule (modul); Niz serialized = mapper.writeValueAsString (myItem);

To je to - sada imamo jednostavniju, prilagođenu JSON serializaciju Predmet-> Korisnik entiteta.

4. Prilagođeni serilizator na klasi

Možemo i mi registrirajte serializator izravno na razredu, umjesto na ObjectMapper:

@JsonSerialize (pomoću = ItemSerializer.class) Predmet javne klase {...}

Sada, kada se izvodi standardna serializacija:

Stavka myItem = nova stavka (1, "theItem", novi korisnik (2, "theUser")); Niz serializiran = novi ObjectMapper (). WriteValueAsString (myItem);

Dobit ćemo prilagođeni JSON izlaz, stvoren pomoću serializatora, naveden putem @JsonSerialize:

{"id": 25, "itemName": "FEDUfRgS", "owner": 15}

Ovo je korisno kada ObjectMapper ne može se pristupiti i konfigurirati izravno.

5. Zaključak

Ovaj je članak ilustrirao kako doći do prilagođenog JSON izlaza s Jackson 2, pomoću serializatora.

Implementacija svih ovih primjera i isječaka koda može se naći na GitHubu - ovo je projekt zasnovan na Mavenu, pa bi ga trebalo biti lako uvesti i pokrenuti kakav jest.