Rumah  >  Artikel  >  Java  >  Bagaimana untuk Menyahsiri Objek Generik Bersarang dalam Jackson dengan Jenis Pemadaman?

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

DDD
DDDasal
2024-10-28 16:15:43838semak imbas

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>

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>

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!

Kenyataan:
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