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!