日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

反序列化 jackson_使用Jackson和Super类型令牌的Json反序列化

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 反序列化 jackson_使用Jackson和Super类型令牌的Json反序列化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

反序列化 jackson

Datatables是一個jquery插件,用于顯示表格信息–它可以增強簡單的表或可以使用基于AJAX的數據并以表格形式顯示信息。

數據表要??求來自服務器的數據遵循特定的JSON格式才能在屏幕上顯示。 考慮要顯示Member實體列表的情況,那么Member的預期json結構必須遵循以下幾行:

{'aaData':[{'id':1,'first':'one','last':'one','addresses':[],'version':0},{'id':2,'first':'two','last':'two','addresses':[],'version':0}],'iTotalRecords':100,'iTotalDisplayRecords':10,'success':true }

可以定義一個通用的Java類型, Jackson可以使用它來生成上述類型的json,請考慮以下Java通用類型:

package mvcsample.types; import java.util.List;public class ListWrapper<T> {private List<T> aaData;private int iTotalRecords;private int iTotalDisplayRecords;private Boolean success;public List<T> getAaData() {return aaData;}public void setAaData(List<T> aaData) {this.aaData = aaData;}public int getiTotalRecords() {return iTotalRecords;}public void setiTotalRecords(int iTotalRecords) {this.iTotalRecords = iTotalRecords;}public int getiTotalDisplayRecords() {return iTotalDisplayRecords;}public void setiTotalDisplayRecords(int iTotalDisplayRecords) {this.iTotalDisplayRecords = iTotalDisplayRecords;}public Boolean getSuccess() {return success;}public void setSuccess(Boolean success) {this.success = success;} }

因此,使用此泛型類型,要生成成員列表,我將具有如本測試中定義的參數化類型:

List<Member> members = new ArrayList<>(); members.add(new Member('one', 'one')); members.add(new Member('two', 'two')); ListWrapper<Member> membersWrapper = new ListWrapper<>(); membersWrapper.setAaData(members); membersWrapper.setiTotalDisplayRecords(10); membersWrapper.setiTotalRecords(100); ObjectMapper objectMapper = new ObjectMapper();StringWriter w = new StringWriter(); objectMapper.writeValue(w, membersWrapper); String json = w.toString(); System.out.println(json);

同樣,可以生成任何其他類型的json。

但是, 相反,生成給定json的Java類型呢?

再次考慮一下將開頭給出的json轉換為ListWrapper <Member>的情況,我可以這樣嘗試反序列化:

ObjectMapper objectMapper = new ObjectMapper(); ListWrapper<Member> membersUpdated = objectMapper.readValue(json, ListWrapper.class);

請注意,以上我無法將類類型稱為ListWrapper <Member> .class,而只能將其稱為ListWrapper.class。

但是,這將不起作用,并且結果類型也不會成為Member類的包裝器,因為在運行時Jackson并不知道必須生成ListWrapper <Member>。

解決方法是以某種方式將有關ListWrapper類型的信息傳遞給Jackson,這就是Super類型標記所適合的地方。 本文詳細說明了它的工作原理,其實質是,盡管類型擦除確實從參數化實例的類型實例中刪除了類型信息。泛型類型,但是類型保留在泛型類的子類中。

例如。 考慮以下從ArrayList <String>派生的StringList類,可以發現基類的類型參數是String,如下面的測試所示:

import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.ArrayList;public class StringList extends ArrayList<String>{public static void main(String[] args) {StringList list = new StringList();Type superClassType = list.getClass().getGenericSuperclass();ParameterizedType parameterizedType = (ParameterizedType)superClassType;System.out.println(parameterizedType.getActualTypeArguments()[0]);} }

這同樣適用于子類也被定義為匿名類的情況:

ArrayList<String> list = new ArrayList<String>(){}; Type superClassType = list.getClass().getGenericSuperclass(); ParameterizedType parameterizedType = (ParameterizedType)superClassType; System.out.println(parameterizedType.getActualTypeArguments()[0]);

這是Super Type令牌模式在內部使用的功能,用于查找參數化類型的類型。 Jackson的com.fasterxml.jackson.core.type.TypeReference抽象類實現了此功能,使用此功能,Jackson反序列化將以這種方式工作:

import com.fasterxml.jackson.core.type.TypeReference;.... ListWrapper<Member> membersWrapper = objectMapper.readValue(json, new TypeReference<ListWrapper<Member>>() {});ListWrapper<Address> addressWrapper = objectMapper.readValue(json, new TypeReference<ListWrapper<Address>>() {});

這樣,可以在給定通用類型和json表示的情況下反序列化兩個不同的參數化類型。

資源:

  • 反映泛型 :http://www.artima.com/weblogs/viewpost.jsp? thread = 208860
  • 尼爾·古夫特(Neal Gafter)的超級類型令牌 :http://gafter.blogspot.com/2006/12/super-type-tokens.html

參考: all和雜物博客上的Json 合作伙伴 Biju Kunjummen的Jackson和Super類型代幣對Json的反序列化 。

翻譯自: https://www.javacodegeeks.com/2013/01/json-deserialization-with-jackson-and-super-type-tokens.html

反序列化 jackson

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的反序列化 jackson_使用Jackson和Super类型令牌的Json反序列化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。