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.