Rumah  >  Artikel  >  Java  >  Bagaimanakah Jackson Boleh Digunakan untuk Menyelesaikan Pemadaman Jenis Semasa Penyahserialisasian Jenis Generik?

Bagaimanakah Jackson Boleh Digunakan untuk Menyelesaikan Pemadaman Jenis Semasa Penyahserialisasian Jenis Generik?

Susan Sarandon
Susan Sarandonasal
2024-10-27 09:26:02515semak imbas

 How Can Jackson Be Used to Resolve Type Erasure During Deserialization of Generic Types?

Rujukan Jenis Jackson dan Generik: Menyelesaikan Pemadaman Jenis dalam Penyahserikatan

Dalam senario kompleks anda, anda cuba menyahsiri data JSON menjadi kaedah generik yang mengharapkan MyRequest< ;T> taip. Walau bagaimanapun, Jackson menghadapi masalah disebabkan pemadaman jenis Java, di mana jenis T generik tidak dikekalkan pada masa jalan. Akibatnya, Jackson merawat MyRequest objek sebagai Peta, mengembalikan kandungannya sebagai LinkedHashMap apabila anda memanggil getMyObject() dalam contoh MyRequest.

Untuk menyelesaikan isu ini dan menentukan jenis yang dijangka akan dikembalikan sebagai T, anda perlu memberikan Jackson dengan eksplisit taip maklumat. Ini boleh dicapai dengan membina objek JavaType menggunakan kaedah getTypeFactory() dan constructCollectionType():

<code class="java">JavaType type = mapper.getTypeFactory()
  .constructCollectionType(List.class, Foo.class);</code>

Ganti List.class dengan jenis senarai yang anda harapkan untuk deserialisasi (cth., List .kelas). Gantikan Foo.class dengan jenis elemen yang dijangkakan dalam senarai (cth., Customer.class).

Setelah anda mempunyai objek JavaType, anda boleh menggunakannya untuk menyahsiri data JSON ke dalam jenis generik yang dijangkakan:

<code class="java">List<Foo> list = mapper.readValue(new File("input.json"), type);</code>

Dengan memberikan Jackson maklumat jenis eksplisit ini, ia akan menyahsiri MyRequest objek dan kembalikan objek T sebenar apabila anda memanggil getMyObject().

Atas ialah kandungan terperinci Bagaimanakah Jackson Boleh Digunakan untuk Menyelesaikan Pemadaman Jenis Semasa Penyahserialisasian Jenis Generik?. 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