jackson deserializer - Collections

klaus1

Aktives Mitglied
Hi, habe eine einfaches Beispiel eines Objektes:
Java:
public class Test implements java.io.Serializable {
    private int number;
    private Collection persons;
}
Nun versuche ich meinen JSON String in das Objekt zu bekommen:
Java:
 ObjectMapper mapper = new ObjectMapper();
 return mapper.readValue( jsonString, new TypeReference< Test >() {
                } );
hier bekomme ich eine Exception ClassCastException / LinkedHashMap. Die Collection wird durch den Mapper auf eine LinkedHashmap anstatt meines gewünschten Person Objects gemappt.
Ich habe leider hier generierte Objekte in einem älteren Umfeld, ohne Typen, daher bin ich angewiesen auf die Objekte und kann nicht etwa den Typ angeben, mit dem der jackson mapper umgehen könnte. (List<Person>)
Wie kann ich Jackson beibringen, hier die Collection auf eine List<Person> zu mappen ? Des weiteren auch in der Person dann weitere Collections mappen..

Danke
 

mrBrown

Super-Moderator
Mitarbeiter
Wie sieht denn das Json aus?

Eine Liste von irgendwas auf ein einzelnes Objekt Mappen klappt natürlich nicht, und ist vermutlich auch nicht das was du meinst?
 

klaus1

Aktives Mitglied
wird mein Objekt nicht mit Collection persons, sondern mit List<Person> persons angegeben, so funktioniert alles korrekt. leider ist der Code wie gesagt generiert aus einem Model und ich müsste jetzt dem Jackson beibringen das er persons nicht auf eine LinkedHashMap sondern auf eine List<Person> mappt... und darunter also im Objekt Person dann auch weitere Angaben zu Collections.
 

httpdigest

Top Contributor
Jackson ermittelt den Typ einer Collection aus Generics-Informationen oder aus Annotationen an dem Feld. Eine andere direkte Möglichkeit (sozusagen eine "side-by-side" Typisierung) zur deklarativen oder API-gestützten Angabe von Typen der zu deserialisierenden Properties gibt es nicht, soweit ich weiß.
Was du machen müsstest, ist, dir quasi DTO-Klasse für die zu deserialisierenden Klassen zu schreiben, welche eben entweder die Typinformationen per Generics oder per Annotations verwenden und aus denen du dann die eigentlichen Klassen instanziieren und befüllen kannst, z.B. mit einem Java POJO/POJO Mapper.
 
X

Xyz1

Gast
BTW... mit Gson wär's ohne Werbung machen zu wollen auch möglich:
Java:
Gson gson = new GsonBuilder().create();
ArrayList<HashMap<String, Object>> list = gson.fromJson(new BufferedReader(new FileReader(filenames[0])), new TypeToken<ArrayList<HashMap<String, Object>>>() { }.getType());
 

httpdigest

Top Contributor
Ich denke mal, das Problem ist, dass versucht wird, ein Test Objekt zu deserialieren, welches eben über eine Instanzvariable eine Liste enthält. Und die Typinferenz von dem Elementtyp dieser Liste geht eben gerade nicht, da Annotations und auch Generics fehlen.
Du kannst halt mit einem TypeToken nicht ausdrücken, dass du einmal ein `Test` Objekt haben willst, welches aber bitteschön in seinem "persons"-Feld eine Liste von `Person` erwartet.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
Hacer Generics & Collections Allgemeine Java-Themen 8
C Generic collections und static typing Allgemeine Java-Themen 4
J Collections, Locks und volatile ? Allgemeine Java-Themen 1
A Compiler-Fehler Woher kommt der NullPointer? (Collections & Iterator) Allgemeine Java-Themen 7
E Collections Collections die Subojekte einer Klasse enthält? Allgemeine Java-Themen 7
O Collections Eigene Methodenzusicherung bei Collections als Parameter Allgemeine Java-Themen 2
D generische Klasse für alle Maps (nicht Collections :-)) Allgemeine Java-Themen 11
B zwei-dimensionale Collections bzw. Array mit Indizes Allgemeine Java-Themen 3
Landei immutable Collections Allgemeine Java-Themen 27
J Collections in Instanzattributen als Kopie übergeben Allgemeine Java-Themen 4
J Rätselhaftes Verhalten von Collections Allgemeine Java-Themen 5
A Collections.emptySet() und triärer Operator Allgemeine Java-Themen 5
M Double Braces Notation um Collections zu initialisieren Allgemeine Java-Themen 9
W Komplexität von addAll() bei Collections Allgemeine Java-Themen 4
K Collections oder Vektoren sicher zu serialisieren? Allgemeine Java-Themen 5
W sortierte Iteration über Set oder Map, bzw. Collections Allgemeine Java-Themen 5
C Viele Informationen aus zwei Collections vergleichen Allgemeine Java-Themen 2
S Wie "zufällig" ist Collections.shuffle(.) Allgemeine Java-Themen 1
S Collections.binarySearch(list,"a") Allgemeine Java-Themen 7
T Sortierung mit Collections.sort() Allgemeine Java-Themen 4
J Collections Allgemeine Java-Themen 2
F Vererbung, Generizität und Collections. Allgemeine Java-Themen 7
G Collections als Array implementieren Allgemeine Java-Themen 2
F Naming Conventions (Collections) Allgemeine Java-Themen 8
K Elegante Lösung zum Manipulieren von Collections gesucht Allgemeine Java-Themen 16
T Collections/Arrays sortieren => ä, ö, ü, ß Groß/klein Allgemeine Java-Themen 3
R Probleme mit Collections - Teil 2 Allgemeine Java-Themen 4
R Probleme mit Collections Allgemeine Java-Themen 5
L-ectron-X Problem mit Collections.sort() mit Java 1.5 Allgemeine Java-Themen 9
C Collections.binarySearch Allgemeine Java-Themen 1
R Entsprechung von Stack() im Collections Framework...? Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben