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.


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