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.


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