最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決Jackson反序列化map,set等復雜類型問題

 更新時間:2020年09月28日 09:30:27   作者:MrHamster  
這篇文章主要介紹了解決Jackson反序列化map,set等復雜類型問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

工作中遇到了這個問題,我簡單的用代碼復現(xiàn)一下,就是一個map,value又為一個set,導致反序列化報錯

@Test
  public void test10() throws Exception {
    //準備一下數(shù)據(jù)
    Map<String, Set<String>> map = new HashMap<>();
    map.put("aaa",new HashSet<String>(){{add("111");add("222");}});
    ObjectMapper om = new ObjectMapper();
    String str01 = om.writeValueAsString(map);
    //System.out.println(str01); // {"aaa":["111","222"]}
    // 正常反序列化,未報錯
    Map<String, Set<String>> map01 = om.readValue(str01, Map.class);
    // 取值的時候就會報錯了
    Set<String> aaa = map01.get("aaa");
  }

報錯:

java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Set

報錯信息:無法將list轉為set。

再拓展開來,其實當你的Map里面的對象如果是object類型的自定義類型,其實都會報錯,無法被強轉,那么我們就需要指定jackson反序列化為什么類型,而不是讓它自主決定反序列化成什么類型,需要用到TypeReference,直接上代碼。

@Test
public void test10() throws Exception {
  //準備一下數(shù)據(jù)
  Map<String, Set<String>> map = new HashMap<>();
  map.put("aaa",new HashSet<String>(){{add("111");add("222");}});
  ObjectMapper om = new ObjectMapper();
  String str01 = om.writeValueAsString(map);
  //System.out.println(str01); // {"aaa":["111","222"]}
  Map<String, Set<String>> m = om.readValue(str01, new TypeReference<HashMap<String, Set<String>>>() {});
  Set<String> aaa = m.get("aaa");
  System.out.println(aaa instanceof HashSet); // true
}

補充知識:Jackson 處理復雜類型(List,map)兩種方法

方法一

String jsonString="[{'id':'1'},{'id':'2'}]"; 
ObjectMapper mapper = new ObjectMapper(); 
JavaType javaType = mapper.getTypeFactory().constructParametricType(List.class, Bean.class); 
//如果是Map類型 mapper.getTypeFactory().constructParametricType(HashMap.class,String.class, Bean.class); 
List<Bean> lst = (List<Bean>)mapper.readValue(jsonString, javaType);  

當轉換完成時一定要用這個轉換對象,如果不用這個對象是沒有值的.如下,當我打印時這個projects對象才有值,否則projects無值 .

List<AlertProjectInfo> projects = mapper.readValue(subProject, mapper.getTypeFactory().constructCollectionType(List.class, AlertProjectInfo.class));
System.out.println(projects.size());

方法二

String jsonString="[{'id':'1'},{'id':'2'}]"; 
ObjectMapper mapper = new ObjectMapper(); 
List<Bean> beanList = mapper.readValue(jsonString, new TypeReference<List<Bean>>() {}); 

以上這篇解決Jackson反序列化map,set等復雜類型問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • MyBatis數(shù)據(jù)脫敏的實現(xiàn)方案介紹

    MyBatis數(shù)據(jù)脫敏的實現(xiàn)方案介紹

    在我們數(shù)據(jù)庫中有些時候會保存一些用戶的敏感信息,比如:手機號、銀行卡等信息,如果這些信息以明文的方式保存,那么是不安全的
    2022-08-08
  • Java的jmap命令的具體使用

    Java的jmap命令的具體使用

    jmap是JDK提供的一個可以生成Java虛擬機的堆轉儲快照dump文件的命令行工具,本文主要介紹了Java的jmap命令的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • java 根據(jù)漢字生成拼音全拼或拼音首字母的示例

    java 根據(jù)漢字生成拼音全拼或拼音首字母的示例

    這篇文章主要介紹了java 根據(jù)漢字生成拼音全拼或拼音首字母的示例,幫助大家更好的利用Java處理數(shù)據(jù),感興趣的朋友可以了解下
    2020-11-11
  • Java 圖片壓縮實現(xiàn)思路及代碼

    Java 圖片壓縮實現(xiàn)思路及代碼

    本文為大家詳細介紹下圖片壓縮的具體實現(xiàn)思路及java代碼,想學習的各位可以參考下哈,希望對大家有所幫助
    2013-07-07
  • Lombok如何快速構建JavaBean與日志輸出

    Lombok如何快速構建JavaBean與日志輸出

    這篇文章主要介紹了Lombok如何快速構建JavaBean與日志輸出,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java判斷一個時間是否在當前時間區(qū)間代碼示例

    Java判斷一個時間是否在當前時間區(qū)間代碼示例

    這篇文章主要給大家介紹了關于使用Java判斷一個時間是否在當前時間區(qū)間的相關資料,在日常開發(fā)中我們經常會涉及到時間的大小比較或者是判斷某個時間是否在某個時間段內,需要的朋友可以參考下
    2023-07-07
  • Log4j詳細使用教程_動力節(jié)點Java學院整理

    Log4j詳細使用教程_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了Log4j的使用教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • java計算自冪數(shù)和水仙花數(shù)

    java計算自冪數(shù)和水仙花數(shù)

    對于一個正整數(shù)而言,長度是n,如果它的各位上的數(shù)字的n次方之和正好等于它本身,那么我們稱這樣的數(shù)為自冪數(shù),下面使用JAVA實現(xiàn)這個方法
    2014-03-03
  • SpringBoot整合SpringSecurity實現(xiàn)JWT認證的項目實踐

    SpringBoot整合SpringSecurity實現(xiàn)JWT認證的項目實踐

    本文會通過創(chuàng)建SpringBoot項目整合SpringSecurity,實現(xiàn)完整的JWT認證機制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • SpringSecurity解決POST方式下CSRF問題

    SpringSecurity解決POST方式下CSRF問題

    本文主要介紹了SpringSecurity解決POST方式下CSRF問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07

最新評論

秭归县| 阿图什市| 田阳县| 阳西县| 宣汉县| 吉水县| 墨脱县| 安宁市| 尚义县| 千阳县| 屏东县| 义马市| 柳州市| 宁蒗| 应城市| 华安县| 阜阳市| 南陵县| 东乡族自治县| 清新县| 桑日县| 太仓市| 辉县市| 余干县| 湄潭县| 册亨县| 云阳县| 遂宁市| 利津县| 都兰县| 彭泽县| 高要市| 延津县| 延川县| 万全县| 鞍山市| 济宁市| 本溪市| 长寿区| 新泰市| 沁水县|