Gson數據類型轉換異常 java.lang.ClassCastException: com.google.gson.internal.出現原因已經解決方案 gson泛型指定

Gson數據類型轉換異常 java.lang.ClassCastException: com.google.gson.internal.出現原因已經解決方案,

今天寫項目發現了一個用gson做JSON串回List的數據對象時,報了這個錯誤,如下

        List<User> userList;
        userList=gson.fromJson((jsonStr),List.class);
        System.out.println(userList.get(0));
        System.out.println(userList.get(0).getUserName());

在這裏插入圖片描述
數據類型轉化異常
但是userList.get(0)確實可以正常拿到相應的數據,但是第4行的,getUserName()卻會報如上的異常。

經過了一番探索之後,發現是因爲Gson在處理Json字符串和對象二者轉換時,對於有泛型的數據類型,需要做一個泛型指定,如 List 等

//先來看一個錯誤的寫法, 0 0 隨便試的 我敢說肯定很多人也試過
        //userList=gson.fromJson(jsonStr,List<User>.class);
//正確操作
        userList=gson.fromJson(jsonStr,new TypeToken<List<User>>(){}.getType());

通過 newTypeToken<List>(){}.getType() 來指定特定泛型的數據轉換,即可避免發生上面的泛型錯誤,而在未指定泛型的情況下,gson默認的是Map,這也是上面gson裏爲什麼會出現 LinkedTreeMap cannot to be cast to User 的情況。

以上。

還有一個的方法就是把泛型指定這些問題交給Gson自己去處理,在外層封裝一個非泛型的實體類,這也是我之前一直沒發現會出現這個異常的原因,我自己基本上有服務端返回的JSON串都是一個Response類型,在Response類裏將List作爲它的域。

Response response=gson.fromJson(jsonStr,Response.class);
userList=response.getUserList();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章