Saya ingin menggunakan pustaka jackson json untuk metode umum sebagai berikut:
public MyRequest<T> tester() {
TypeReference<MyWrapper<T>> typeRef = new TypeReference<MyWrapper<T>>();
MyWrapper<T> requestWrapper = (MyWrapper<T>) JsonConverter.fromJson(jsonRequest, typeRef);
return requestWrapper.getRequest();
}
...
public class MyWrapper<T> {
private MyRequest<T> request;
public MyRequest<T> getRequest() {
return request;
}
public void setRequest(MyRequest<T> request) {
this.request = request;
}
}
public class MyRequest{
private List<T> myobjects;
public void setMyObjects(List<T> ets) {
this.myobjects = ets;
}
@NotNull
@JsonIgnore
public T getMyObject() {
return myobjects.get(0);
}
}
Sekarang masalahnya adalah ketika saya memanggil getMyObject () yang ada di dalam objek permintaan, jackson mengembalikan objek kustom bersarang sebagai LinkedHashMap. Apakah ada cara di mana saya menentukan bahwa objek T perlu dikembalikan ?. Contoh: Jika saya mengirimkan objek bertipe Customer maka Customer harus dikembalikan dari List tersebut ?.
Terima kasih.
TypeReference
abstrak?Jawaban:
Ini adalah masalah terkenal dengan penghapusan tipe Java: T hanyalah variabel tipe, dan Anda harus menunjukkan kelas sebenarnya, biasanya sebagai argumen Kelas. Tanpa informasi seperti itu, yang terbaik yang bisa dilakukan adalah dengan menggunakan batasan; dan T polos kira-kira sama dengan 'T memanjang Objek'. Dan Jackson kemudian akan mengikat Objek JSON sebagai Peta.
Dalam kasus ini, metode penguji perlu memiliki akses ke Kelas, dan Anda dapat membuat
lalu
sumber
'JavaType' bekerja !! Saya mencoba unmarshall (deserialize) Daftar di json String ke Objek java ArrayList dan berjuang untuk menemukan solusi sejak hari.
Di bawah ini adalah kode yang akhirnya memberi saya solusi. Kode:
sumber
IOException
(hanya perlu satu tangkapan), dan bahwa introspektor anotasi default sudah adaJacksonAnnotationIntrospector
- jadi tidak perlu melakukan apa punObjectMapper
, cukup buat dan berfungsi.Saya memodifikasi jawaban rushidesai1 untuk memasukkan contoh yang berfungsi.
JsonMarshaller.java
Keluaran
JsonMarshallerUnmarshaller.java
Station.java
data.json
sumber