Nicht finden können, Deserialisieren für nicht-konkrete Collection-Typ
Bin ich mit dem jackson-Bibliothek zum anzeigen von JSON in Objekte. Ich habe vereinfacht das problem viel, dies ist, was passiert:
public class MyObject{
public ForeignCollection<MySecondObject> getA(){
return null;
}
public ForeignCollection<MyThirdObject> getB(){
return null;
}
}
Ich bin Parsen der eine leere JSON-string:
ObjectMapper mapper = new ObjectMapper();
mapper.readValue("{}", MyObject.class);
Auf readValue
, bekomme ich diese Exception:
com.fasterxml.jackson.databind.JsonMappingException: Can not find a deserializer for non-concrete Collection type [collection type; class com.j256.ormlite.dao.ForeignCollection, contains [simple type, class com.test.MyThirdObject]]
Dies geschieht, wenn ich zwei get
Methoden in der MyObject
Klasse, die Rückkehr einer ForeignCollection
. Das entfernen einer der get
Methoden Ergebnisse keine Ausnahmen.
Ich bin wirklich überrascht von der Tatsache, dass der mapper sieht die get
Methoden, es sollten nur die Felder, auf die ich hinweisen.
Was ist hier passiert?
- Klingt wie die JSON-mapper versucht, die Zuordnung aller
get*
Methoden. Haben Sie versucht, die Rückgabe einesCollection
statt? Möglicherweise haben Sie zu beschriften die JSON-Eigenschaften verwenden und nicht einen aufmySecondObjects
. stackoverflow.com/questions/4410470/... - Vielen Dank für die Anmerkung-Hinweis, das macht das Leben viel einfacher! Allerdings ist das problem nicht gelöst worden ist. Ich habe etwas herausgefunden, und Sie veränderten die Frage ein bisschen.
- Wo sind die set-Methoden? Wie würde deserializer "nur-Satz" auf den Feldern, ohne? Oder werden Sie nur nicht angezeigt? Geben Sie ab-setter oder Feld sollte Vorrang haben, obwohl getter muss auch berücksichtigt werden, wie zusätzliche Quelle für Anmerkungen und kann verwendet werden zum verfeinern geben.
- Ich habe entfernt so viel wie möglich, hätte ich einige Felder wie
@JsonProperty("name") private String myName
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die Guave-Modul in Ihrem ObjectMapper. Hier ist die Maven-dependency:
In Ihrem code:
Kann man auch weglassen
@JsonDeserialize
und@JsonSerialize
Anmerkungen.Mehr info hier.
Habe ich behoben durch die Umwandlung der
ForeignCollection
zu einemList
:Müssen Sie möglicherweise benutzerdefinierte deserializer für
ForeignCollection
; oder, wenn es bekannt ist Implementierungsklasse verwenden Anmerkung:angeben, welche konkrete Unterklasse für diesen abstrakten Typ.
ForeignCollection
Objekte. Siehe Frage bearbeitet.