Jackson - vlastný serializátor
1. Prehľad
Tento rýchly tutoriál ukáže, ako serializovať entitu Java s Jacksonom 2 pomocou a Vlastný serializátor.
Ak chcete kopať hlbšie a učiť sa ďalšie super veci, ktoré môžete s Jacksonom 2 robiť - pokračujte ďalej k hlavnému výukovému programu Jackson.
2. Štandardná serializácia objektového grafu
Poďme definovať 2 jednoduché entity a uvidíme, ako ich Jackson serializuje bez akejkoľvek vlastnej logiky:
public class User {public int id; verejné meno reťazca; } public class Item {public int id; public String itemName; verejný vlastník používateľa; }
Teraz poďme serializovať Položka subjekt s a Používateľ subjekt:
Položka myItem = nová položka (1, "theItem", nový používateľ (2, "theUser")); Reťazec serializovaný = nový ObjectMapper (). WriteValueAsString (myItem);
Výsledkom bude úplné zastúpenie JSON pre obe entity:
{"id": 1, "itemName": "theItem", "owner": {"id": 2, "name": "theUser"}}
3. Vlastný serializátor na serveri ObjectMapper
Teraz, Poďme zjednodušiť výstup JSON vyššie iba serializáciou id z Používateľ, nie celá Používateľ predmet; chceli by sme získať nasledujúci, jednoduchší JSON:
{"id": 25, "itemName": "FEDUfRgS", "vlastník": 15}
Jednoducho povedané, budeme musieť definovať vlastný Serializer pre Položka objekty:
verejná trieda ItemSerializer rozširuje StdSerializer {public ItemSerializer () {this (null); } public ItemSerializer (trieda t) {super (t); } @Override public void serialize (hodnota položky, JsonGenerator jgen, poskytovateľ SerializerProvider) hodí IOException, JsonProcessingException {jgen.writeStartObject (); jgen.writeNumberField ("id", value.id); jgen.writeStringField ("itemName", value.itemName); jgen.writeNumberField ("vlastník", hodnota.vlastnik.id); jgen.writeEndObject (); }}
Teraz musíme tento vlastný serializátor zaregistrovať v ObjectMapper pre Položka triedy a vykonajte serializáciu:
Item myItem = nová položka (1, "theItem", nový používateľ (2, "theUser")); ObjectMapper mapovač = nový ObjectMapper (); Modul SimpleModule = nový SimpleModule (); module.addSerializer (Item.class, new ItemSerializer ()); mapper.registerModule (modul); Reťazec serializovaný = mapper.writeValueAsString (myItem);
A je to - teraz máme jednoduchšiu vlastnú JSON serializáciu Položka-> Používateľ subjekty.
4. Vlastný serializátor v triede
Môžeme tiež zaregistrujte serializátor priamo v triede, namiesto na ObjectMapper:
@JsonSerialize (using = ItemSerializer.class) verejná trieda Item {...}
Teraz, keď vystupujete štandardná serializácia:
Položka myItem = nová položka (1, "theItem", nový používateľ (2, "theUser")); Reťazec serializovaný = nový ObjectMapper (). WriteValueAsString (myItem);
Dostaneme vlastný výstup JSON, ktorý vytvoril serializátor, zadaný pomocou @JsonSerialize:
{"id": 25, "itemName": "FEDUfRgS", "vlastník": 15}
To je užitočné, keď ObjectMapper nie je možné pristupovať a konfigurovať ich priamo.
5. Záver
Tento článok ilustroval, ako sa dá dostať k vlastnému výstupu JSON s Jacksonom 2 pomocou Serializátorov.
Implementácia všetkých týchto príkladov a útržkov kódu nájdete na GitHub - toto je projekt založený na Maven, takže by malo byť ľahké ho importovať a spustiť tak, ako je.