Jackson erkennt die @ JsonCreator Annotation nicht

9

Ich verwende derzeit Jackson 1.4.2 und versuche die Deserialisierung von code -Werten (eindeutige Bezeichner für Typinformationen), die von unserer Benutzeroberfläche an die Java-Controller (Servlets) zurückgegeben werden.

Es gibt mehrere Typen (z. B. ABCType , XYZType usw.), die alle von AbstractType ausgehen, aber jeder konkrete Typ hat eine statische Factory-Methode, die als einzelnen Parameter eine eindeutige ID und Gibt das Typobjekt (Name, zugeordnete Typen, Beschreibung, gültige Akronyme usw.) zurück, das durch diesen Bezeichner dargestellt wird. Die statische Methode innerhalb jedes konkreten Typs (z. B. XYZType ) wird mit @JsonCreator :

versehen %Vor%

Das Problem, das ich sehe, ist eine Ausnahme, die von Jacksons Mapper verursacht wird, der versucht, den JSON zu diesen Typen zu deserialisieren:

  

Erstellt von: org.codehaus.jackson.map.JsonMappingException: Kein Standardkonstruktor für type gefunden [einfacher Typ, Klasse com.company.type.XYZtype]: kann nicht vom Json-Objekt instanziiert werden.

Was fehlt mir hier an der @JsonCreator Annotation zu statischen Factory-Methoden (oder ist es mit Jackson 1.4.2 zu tun, die sich mit den konkreten Typen, die von AbstractType ausgehen, abmüht?)?

    
user376327 25.06.2010, 14:53
quelle

2 Antworten

13

Die Annotation @JsonCreator erfordert die Annotation @JsonProperty. Diese Wiki-Seite von Jackson enthält nur wenige Informationen, bietet aber Beispielcode:

%Vor%

Sie finden eine ausführlichere Erklärung im Blogpost .

Ihr Beispielcode sollte daher etwa so aussehen:

%Vor%     
Paul 07.08.2013, 23:25
quelle
4

Das Problem ist, dass Jackson nur den deklarierten Basistyp sieht und nicht weiß, wo nach Subtypen gesucht werden soll. Da die vollständige Handhabung des polymorphen Typs in Version 1.5 hinzugefügt wurde, müssen Sie die Factory-Methode in der Basisklasse hinzufügen und Methoden von dort aus versenden.

    
StaxMan 28.06.2010 22:55
quelle

Tags und Links