Jackson 和泛型類型參考:處理巢狀泛型物件
Jackson JSON 函式庫允許對複雜物件結構進行強大的處理。然而,在自訂物件中使用泛型類型時會出現一個常見的挑戰。
問題陳述:
考慮以下程式碼:
<code class="java">public class MyWrapper<T> { private MyRequest<T> request; // ... getters and setters } public class MyRequest<T> { private List<T> myobjects; // ... getters and setters }</code>
通用方法嘗試將JSON 物件反序列化為MyWrapper 實例:
實例:<code class="java">public MyRequest<T> tester() { TypeReference<MyWrapper<T>> typeRef = new TypeReference<MyWrapper<T>>(); MyWrapper<T> requestWrapper = (MyWrapper<T>) JsonConverter.fromJson(jsonRequest, typeRef); return requestWrapper.getRequest(); }</code>
解決方案:
指定要傳回確切的類型 T,您需要向 Jackson 提供有關該類型的附加資訊。這可以透過使用 Jackson 映射器中的 JavaType 類別來實現。<code class="java">JavaType type = mapper.getTypeFactory(). constructCollectionType(List.class, Foo.class);</code>
<code class="java">TypeReference<MyWrapper<T>> typeRef = new TypeReference<MyWrapper<T>>(); JavaType requestType = mapper.getTypeFactory(). constructCollectionType(MyRequest.class, type.getType()); MyWrapper<T> requestWrapper = (MyWrapper<T>) JsonConverter.fromJson(jsonRequest, requestType);</code>
以上是如何使用 Jackson 反序列化巢狀通用物件:使用 TypeReference 和 JavaType 的指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!