1. Übersicht
Dieses kurze Tutorial zeigt, wie Sie eine Java-Entität mit Jackson 2 mithilfe eines benutzerdefinierten Serializers serialisieren .
Wenn Sie tiefer graben und andere coole Dinge lernen möchten, die Sie mit dem Jackson 2 tun können, besuchen Sie das Haupt-Tutorial von Jackson.
2. Standardserialisierung eines Objektgraphen
Lassen Sie uns zwei einfache Entitäten definieren und sehen, wie Jackson diese ohne benutzerdefinierte Logik serialisiert:
public class User { public int id; public String name; } public class Item { public int id; public String itemName; public User owner; }
Lassen Sie uns nun eine Item- Entität mit einer User- Entität serialisieren :
Item myItem = new Item(1, "theItem", new User(2, "theUser")); String serialized = new ObjectMapper().writeValueAsString(myItem);
Dies führt zu einer vollständigen JSON-Darstellung für beide Entitäten:
{ "id": 1, "itemName": "theItem", "owner": { "id": 2, "name": "theUser" } }
3. Benutzerdefinierter Serializer auf dem ObjectMapper
Nun, vereinfachen sie die JSON Ausgabe oben , indem nur die Serialisierung - ID des Benutzers , nicht das gesamte Benutzerobjekt; Wir möchten den folgenden, einfacheren JSON erhalten:
{ "id": 25, "itemName": "FEDUfRgS", "owner": 15 }
Einfach ausgedrückt, müssen wir einen benutzerdefinierten Serializer für Objektobjekte definieren :
public class ItemSerializer extends StdSerializer { public ItemSerializer() { this(null); } public ItemSerializer(Class t) { super(t); } @Override public void serialize( Item value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { jgen.writeStartObject(); jgen.writeNumberField("id", value.id); jgen.writeStringField("itemName", value.itemName); jgen.writeNumberField("owner", value.owner.id); jgen.writeEndObject(); } }
Jetzt müssen wir diesen benutzerdefinierten Serializer beim ObjectMapper für die Item- Klasse registrieren und die Serialisierung durchführen:
Item myItem = new Item(1, "theItem", new User(2, "theUser")); ObjectMapper mapper = new ObjectMapper(); SimpleModule module = new SimpleModule(); module.addSerializer(Item.class, new ItemSerializer()); mapper.registerModule(module); String serialized = mapper.writeValueAsString(myItem);
Das war's - wir haben jetzt eine einfachere, benutzerdefinierte JSON-Serialisierung der Item-> User- Entitäten.
4. Benutzerdefinierter Serializer für die Klasse
Wir können den Serializer auch direkt in der Klasse anstatt im ObjectMapper registrieren :
@JsonSerialize(using = ItemSerializer.class) public class Item { ... }
Wenn Sie nun die Standard-Serialisierung durchführen :
Item myItem = new Item(1, "theItem", new User(2, "theUser")); String serialized = new ObjectMapper().writeValueAsString(myItem);
Wir erhalten die benutzerdefinierte JSON-Ausgabe, die vom Serializer erstellt wurde und über @JsonSerialize angegeben wird :
{ "id": 25, "itemName": "FEDUfRgS", "owner": 15 }
Dies ist hilfreich, wenn auf den ObjectMapper nicht direkt zugegriffen und konfiguriert werden kann.
5. Schlussfolgerung
Dieser Artikel zeigt, wie Sie mit Jackson 2 mithilfe von Serializern zu einer benutzerdefinierten JSON-Ausgabe gelangen.
Die Implementierung all dieser Beispiele und Codefragmente finden Sie auf GitHub - dies ist ein Maven-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein, wie es ist.