Rumah > Java > javaTutorial > teks badan

Bagaimana untuk Menyahsiri Objek Generik Bersarang dalam Jackson dengan Jenis Pemadaman?

DDD
Lepaskan: 2024-10-28 16:15:43
asal
752 orang telah melayarinya

How to Deserialize Nested Generic Objects in Jackson with Type Erasure?

Rujukan Jenis Jackson dan Generik

Apabila cuba menggunakan perpustakaan JSON Jackson dengan kaedah generik, pembangun mungkin menghadapi masalah apabila objek tersuai bersarang dikembalikan sebagai LinkedHashMap dan bukannya kelas sebenar. Masalah ini timbul disebabkan oleh pemadaman jenis Java, yang mengalih keluar maklumat jenis semasa penyusunan.

Dalam kod yang disediakan, kaedah penguji bertujuan untuk menghuraikan permintaan JSON ke dalam objek MyRequest dengan jenis generik T. Walau bagaimanapun, tanpa menyatakan kelas sebenar untuk T, Jackson lalai untuk merawatnya sebagai T memanjangkan Objek dan mengikat objek JSON pada peta.

Untuk menyelesaikan masalah ini, kaedah penguji harus mempunyai akses kepada kelas sebenar apabila menyahsiri permintaan JSON. Ini boleh dicapai dengan menyatakannya sebagai hujah Kelas. Kod berikut menunjukkan cara untuk melakukan ini:

<code class="java">public MyRequest<T> tester(Class<T> clazz) {
    TypeReference<MyWrapper<T>> typeRef = new TypeReference<MyWrapper<T>>() {};
    MyWrapper<T> requestWrapper = (MyWrapper<T>) JsonConverter.fromJson(jsonRequest, typeRef);
    return requestWrapper.getRequest();
}</code>
Salin selepas log masuk

Selain itu, untuk memastikan kelas sebenar digunakan semasa penyahserikatan, bina JavaType menggunakan TypeFactory seperti berikut:

<code class="java">JavaType type = mapper.getTypeFactory().constructCollectionType(List.class, clazz);</code>
Salin selepas log masuk

Dengan pengubahsuaian ini, Jackson akan menyahsiri permintaan JSON ke dalam Senarai yang mengandungi contoh kelas yang ditentukan, membenarkan kaedah getMyObject() mengembalikan objek dengan jenis yang sesuai.

Atas ialah kandungan terperinci Bagaimana untuk Menyahsiri Objek Generik Bersarang dalam Jackson dengan Jenis Pemadaman?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!