Jackson Custom Property-Namen-Typ-Zuordnung für Polymorphe Eigenschaften
Ich versuche zu Deserialisieren eine ziemlich komplexe POJOs JSON, wo ich brauchen würde, um eine bestimmte Eigenschaft festzulegen-Namen zu geben-Auflösung, sondern noch faild fininding diese eher einfache Funktion.
annehmen, dass eine Klasse wie:
class Example {
int id;
Map<String,Object> extras;
}
und Jackson ist mit der Serialisierung der POJO korrekt in JSON, bei dem die Karte serialisiert wird um ein Schlüssel-Wert-Karte genau wie erwartet:
{...
id:5,
extras:{object1:{...}, object2:{...}}
...}
nun möchte ich erzählen, dass Jackson explizit Deserialisieren die extras, die Objekte von Ihrem tatsächlichen Typ. Also ich muss sagen, Jackson irgendwie zuordnen "Objekt1" eingeben und "object2" zu Typ B.
Ist das möglich? Danke.
- Ja, es ist möglich. Aber du wirst wohl einschicken müssen im json-Format geben Sie Informationen für jedes Objekt in der Karte.
- Ich bin nicht in der Steuerung das empfangene json, obwohl ich weiß, dass die Objekte geben.
- Wie bist du erkennenden Objekt-Typ?
- nach name, ich weiß, dass der Schlüssel "Objekt1" ist die Zugehörigkeit zu Typ A.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es einen schönen guide, wie man mit ihm umgehen: http://www.cowtowncoder.com/blog/archives/2010/03/entry_372.html
Und ein weiteres tutorial:
http://programmerbruce.blogspot.de/2011/05/deserialize-json-with-jackson-into.html
Den 6. Beispiel aus dem zweiten tutorial geändert werden könnten, und deserializer hätte-Schleife mit so etwas wie:
Ist der einfachste Weg zu ermöglichen, so genannte "Standard-Eingabe" - es bedeutet in etwa entspricht der addition
@JsonTypeInfo
annotation (welches Unterstützung polymorphe Art der Handhabung) - und das fügt Art von Informationen in Werte. Also:Wenn die Extras, die Karte enthält nur die 2 Objekte (Objekt1 und objekt2) können Sie die folgenden
Dies ist möglich mit einer benutzerdefinierten deserializer; sehen Sie dieses link, für Beispiele. In einer Mutter-shell, Sie müssen sagen, Jackson, welchen Typ ein Feld mit unmarshallt zu; obwohl, das könnte fehleranfällig sein, falls Ihre serialisierten Daten (JSON) dynamisch ändern.
Können Sie dann leicht Anmerkungen-Feld der setter so: