Ich möchte einen benutzerdefinierten Code ausführen, wenn ich einen bestimmten Typ mit Jackson 1.9 deserialisiere. Ich möchte jedoch nicht den gesamten Deserializer manuell schreiben, sondern nur das Standardverhalten hinzufügen. Der Versuch, dies in einer JsonDeserializer
auf naive Weise zu tun, führt jedoch zu einer unendlichen Rekursion. Momentan verwendet mein Ansatz ein völlig separates ObjectMapper
, aber das fühlt sich an wie ein riesiger Hack.
Die polymorphe Deserialisierung sollte in der Lage sein, den Typ der Eingabe vom Inhalt der Eingabe abzuleiten. Wenn Sie dafür die benutzerdefinierte Deserialisierung benötigen, können Sie dies über Anmerkungen erreichen. Siehe dieses Beispiel als Referenz.
(Entschuldigung dafür, dass ich die eigentliche Frage nicht beantworte; das beantwortet, was ich aus der Bemerkung des Posters auf die "root" -Frage verweise).
Wenn Sie dieses spezielle Verhalten nur für eine Klasse implementieren möchten, können Sie einen zusätzlichen Typ mit denselben Eigenschaften erstellen. Ich bin nicht sicher, dass dies eine echte Antwort auf Ihre Frage ist, aber sehen Sie sich mein Beispiel an. POJO-Klasse mit Eigenschaft:
%Vor%Deserializer mit innerem Typ:
%Vor%Und einfache Verwendung:
%Vor%Ich denke, das ist ein bisschen weniger Hack als dein, aber es ist immer noch Hack.