Jackson - Egyéni Serializer
1. Áttekintés
Ez a gyors bemutató bemutatja, hogyan lehet egy Java entitást sorosítani a Jackson 2-vel az a használatával Custom Serializer.
Ha mélyebbre akarsz ásni és tanulni egyéb jó dolgokat tehetsz a Jackson 2-vel - folytassa a Jackson fő oktatóanyaggal.
2. Az objektumgrafikon szokásos sorosítása
Határozzunk meg 2 egyszerű entitást, és nézzük meg, hogyan sorosítja ezeket Jackson minden egyedi logika nélkül:
public class Felhasználó {public int id; public String név; } public class Item {public int id; public String itemName; nyilvános Felhasználótulajdonos; }
Most sorosítsunk egy Tétel entitás a Felhasználó entitás:
Item myItem = new Item (1, "theItem", new User (2, "theUser")); Karaktersorozat = új ObjectMapper (). WriteValueAsString (myItem);
Ennek eredményeként a JSON teljes képviseletet eredményez mindkét entitás számára:
{"id": 1, "itemName": "theItem", "owner": {"id": 2, "name": "theUser"}}
3. Egyéni Serializer a ObjectMapper
Most, egyszerűsítsük a JSON kimenetet fentebb csak a id a Felhasználó, nem pedig az egészet Felhasználó tárgy; a következő egyszerűbb JSON-t szeretnénk beszerezni:
{"id": 25, "itemName": "FEDUfRgS", "tulajdonos": 15}
Egyszerűen fogalmazva, muszáj lesz definiálhat egy egyedi Serializer-t mert Tétel tárgyak:
public class ItemSerializer kiterjeszti a StdSerializer {public ItemSerializer () {this (null); } public ItemSerializer (t osztály) {super (t); } @Orride public void serialize (Elem értéke, JsonGenerator jgen, SerializerProvider szolgáltató) dobja az IOException, JsonProcessingException {jgen.writeStartObject (); jgen.writeNumberField ("id", value.id); jgen.writeStringField ("itemName", value.itemName); jgen.writeNumberField ("tulajdonos", value.owner.id); jgen.writeEndObject (); }}
Most regisztrálnunk kell ezt az egyedi sorosítót a ObjectMapper a Tétel osztályban, és hajtsa végre a sorosítást:
Item myItem = new Item (1, "theItem", new User (2, "theUser")); ObjectMapper mapper = új ObjectMapper (); SimpleModule module = new SimpleModule (); module.addSerializer (Item.class, új ItemSerializer ()); mapper.registerModule (modul); Karakterlánc sorosított = mapper.writeValueAsString (myItem);
Ennyi - mostantól egyszerűbb, egyedi JSON-sorozatosítással rendelkezünk Elem-> Felhasználó entitások.
4. Custom Serializer az osztályon
Azt is megtehetjük regisztrálja a sorosítót közvetlenül az osztályon, ahelyett, hogy a ObjectMapper:
@JsonSerialize (using = ItemSerializer.class) public class Item {...}
Most, amikor fellép szabványos sorosítás:
Item myItem = new Item (1, "theItem", new User (2, "theUser")); Karaktersorozat = új ObjectMapper (). WriteValueAsString (myItem);
Megkapjuk a serializer által létrehozott egyedi JSON kimenetet, amelyet a következőn keresztül adunk meg @JsonSerialize:
{"id": 25, "itemName": "FEDUfRgS", "tulajdonos": 15}
Ez hasznos, ha a ObjectMapper nem érhető el és nem konfigurálható közvetlenül.
5. Következtetés
Ez a cikk azt szemléltette, hogyan juthat el egyedi JSON kimenethez a Jackson 2-vel a Serializerek használatával.
Mindezen példák és kódrészletek megvalósítása megtalálható a GitHub oldalon - ez egy Maven-alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.