Ich habe eine Java-Klasse MyPojo
, die ich von JSON deserialisieren möchte. Ich habe eine spezielle MixIn-Klasse konfiguriert MyPojoDeMixIn
, um mich bei der Deserialisierung zu unterstützen. MyPojo
hat nur int
und String
Instanzvariablen mit richtigen Gettern und Setzern kombiniert. MyPojoDeMixIn
sieht ungefähr so aus:
public abstract class MyPojoDeMixIn {
MyPojoDeMixIn(
@JsonProperty("JsonName1") int prop1,
@JsonProperty("JsonName2") int prop2,
@JsonProperty("JsonName3") String prop3) {}
}
In meinem Testclient mache ich Folgendes, aber es funktioniert natürlich nicht zur Kompilierungszeit, da es einen JsonMappingException
Zusammenhang mit einer Typinkongruenz gibt.
ObjectMapper m = new ObjectMapper();
m.getDeserializationConfig().addMixInAnnotations(MyPojo.class,MyPojoDeMixIn.class);
try { ArrayList<MyPojo> arrayOfPojo = m.readValue(response, MyPojo.class); }
catch (Exception e) { System.out.println(e) }
Ich bin mir bewusst, dass ich dieses Problem beheben könnte, indem ich ein "Antwort" -Objekt erstelle, das nur ein Objekt enthält. ArrayList<MyPojo>
Dann müsste ich diese etwas nutzlosen Objekte für jeden einzelnen Typ erstellen, den ich zurückgeben möchte.
Ich habe mir auch JacksonInFiveMinutes online angesehen , hatte aber eine schreckliche Zeit damit, die Dinge zu verstehen Map<A,B>
und zu verstehen, wie sie mit meinem Problem zusammenhängen. Wenn Sie nicht sagen können, bin ich völlig neu in Java und komme aus einem Obj-C-Hintergrund. Sie erwähnen ausdrücklich:
Neben der Bindung an POJOs und "einfache" Typen gibt es eine weitere Variante: die Bindung an generische (typisierte) Container. Dieser Fall erfordert eine spezielle Behandlung aufgrund der sogenannten Typlöschung (die von Java verwendet wird, um Generika auf etwas abwärtskompatible Weise zu implementieren), wodurch verhindert wird, dass Sie etwas wie Collection.class verwenden (das nicht kompiliert wird).
Wenn Sie also Daten in eine Karte binden möchten, müssen Sie Folgendes verwenden:
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
Wie kann ich direkt deserialisieren ArrayList
?