Saya memiliki kelas Java MyPojo
yang ingin saya deserialisasi dari JSON. Saya telah mengonfigurasi kelas MixIn khusus,, MyPojoDeMixIn
untuk membantu saya dengan deserialisasi. MyPojo
hanya memiliki int
dan String
variabel instan digabungkan dengan pengambil dan penyetel yang tepat. MyPojoDeMixIn
terlihat seperti ini:
public abstract class MyPojoDeMixIn {
MyPojoDeMixIn(
@JsonProperty("JsonName1") int prop1,
@JsonProperty("JsonName2") int prop2,
@JsonProperty("JsonName3") String prop3) {}
}
Di klien uji saya, saya melakukan hal berikut, tetapi tentu saja itu tidak berfungsi pada waktu kompilasi karena ada yang JsonMappingException
terkait dengan ketidakcocokan tipe.
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) }
Saya sadar bahwa saya dapat mengatasi masalah ini dengan membuat objek "Respons" yang hanya memiliki satu ArrayList<MyPojo>
di dalamnya, tetapi kemudian saya harus membuat objek yang agak tidak berguna ini untuk setiap jenis yang ingin saya kembalikan.
Saya juga melihat JacksonInFiveMinutes secara online tetapi kesulitan memahami hal-hal tentang Map<A,B>
dan bagaimana kaitannya dengan masalah saya. Jika Anda tidak tahu, saya sama sekali baru mengenal Java dan berasal dari latar belakang Obj-C. Mereka secara khusus menyebutkan:
Selain mengikat ke POJO dan tipe "sederhana", ada satu varian tambahan: yang mengikat ke kontainer generik (diketik). Kasus ini memerlukan penanganan khusus karena apa yang disebut Type Erasure (digunakan oleh Java untuk mengimplementasikan generik dengan cara yang agak kompatibel ke belakang), yang mencegah Anda menggunakan sesuatu seperti Collection.class (yang tidak dapat dikompilasi).
Jadi, jika Anda ingin mengikat data ke dalam Peta, Anda perlu menggunakan:
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
Bagaimana saya bisa melakukan deserialisasi langsung ke ArrayList
?