首頁 > Java > java教程 > 主體

如何使用 Jackson 來解決泛型類型反序列化過程中的類型擦除問題?

Susan Sarandon
發布: 2024-10-27 09:26:02
原創
517 人瀏覽過

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

Jackson 和泛型類型參考:解決反序列化中的類型擦除

在複雜的場景中,您嘗試將JSON 資料反序列化為需要MyRequest< 的泛型方法;T>型別。然而,由於 Java 的類型擦除,Jackson 遇到了一個問題,即泛型類型 T 在運行時不會保留。因此,Jackson 將嵌套的 MyRequest 視為物件作為 Map,當您在 MyRequest 實例中呼叫 getMyObject() 時,將其內容作為 LinkedHashMap 傳回。

要解決此問題並將傳回的預期類型指定為 T,您需要向 Jackson 提供明確的類型資訊。這可以透過使用getTypeFactory() 和constructCollectionType() 方法建構JavaType 物件來實現:

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

將List.class 替換為您希望反序列化的清單的類型(例如,List 。班級)。將 Foo.class 替換為清單中元素的預期類型(例如 Customer.class)。

獲得JavaType 物件後,您可以使用它將JSON 資料反序列化為預期的通用類型:

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

透過向Jackson 提供此顯式類型信息,它將正確反序列化嵌套的MyRequest 。物件並在呼叫 getMyObject() 時傳回實際的 T 物件。

以上是如何使用 Jackson 來解決泛型類型反序列化過程中的類型擦除問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!