【exceptions】java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxxxx
這個問題是我在用jackson將字串準換成指定物件的List,轉換的時候沒有異常,但是通過for迴圈拿出物件使用的時候出現的問題.原來我的轉換是寫在controller裡面,後來為了通用準備寫到工具類中,但是發現一個問題,就是在controller中可以正確轉換並在service中使用,通過工具類來獲取後就在service中使用出丟擲這個異常.
jackson中的問題
- controller中的處理
// json解析器
ObjectMapper om = new ObjectMapper();
// 解析出來的所有明細
List<XXX> list = null;
try {
details = om.readValue(getPara("json"),
new TypeReference<List<XXX>>() {
});
} catch (IOException e) {
log.info("json解析失敗:" + e.getMessage());
return;
}
這樣的處理結果是正確的,可以正常使用,但是寫在工具類中出現了這個異常
- 工具類中的處理
@SuppressWarnings("unchecked")
public static <T> List <T> parseJsonList(String json, Class<T> clazz) {
try {
ObjectMapper INSTANCE = new ObjectMapper();
return (List<T>) INSTANCE.readValue(json, new TypeReference<List<T>>() {
});
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
轉換沒有出現問題,但是到使用的時候,這個List裡面的物件是LinkedHashMap,並沒有轉化成我需要的T.導致了這個問題
- 解決方法
/**
* @param json 準備轉換json
* @param clazz 集合元素型別
* @return
* @description json字串轉換成物件集合
* @author paul
* @date 2017年8月12日 下午1:28:27
* @update 2017年8月12日 下午1:28:27
* @version V1.0
*/
@SuppressWarnings("unchecked")
public static <T> List<T> parseJsonList(String json, Class<T> clazz) {
try {
JavaType javaType = getCollectionType(ArrayList.class, clazz);
return (List<T>) INSTANCE.readValue(json, javaType);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* @param collectionClass 集合類
* @param elementClasses 集合元素類
* @return
* @description 獲取泛型的ColloectionType
* @author paul
* @date 2017年8月12日 下午2:17:38
* @update 2017年8月12日 下午2:17:38
* @version V1.0
*/
private static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
return INSTANCE.getTypeFactory().constructParametricType(collectionClass, elementClasses);
}
這個方法是我在網上找到的一個可用的方法,解決了這個問題。我懷疑jackson底層封裝預設用了LinkedHashMap,所以出現了這個問題。
- 舉個栗子:
有一個想要轉化的結果類User為:
public class User {
private int id;
private String code;
private String name;
//...(getter,setter)
}
有一個工具類:
public class JsonUtil{
/**
* @param json 準備轉換json
* @param clazz 集合元素型別
* @return
* @description json字串轉換成物件集合
* @author paul
* @date 2017年8月12日 下午1:28:27
* @update 2017年8月12日 下午1:28:27
* @version V1.0
*/
@SuppressWarnings("unchecked")
public static <T> List<T> parseJsonList(String json, Class<T> clazz) {
try {
JavaType javaType = getCollectionType(ArrayList.class, clazz);
return (List<T>) INSTANCE.readValue(json, javaType);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* @param collectionClass 集合類
* @param elementClasses 集合元素類
* @return
* @description 獲取泛型的ColloectionType
* @author paul
* @date 2017年8月12日 下午2:17:38
* @update 2017年8月12日 下午2:17:38
* @version V1.0
*/
private static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
return INSTANCE.getTypeFactory().constructParametricType(collectionClass, elementClasses);
}
}
在需要轉換的地方如此呼叫就可以了:
String json = "{\"id\":1,\"code\":\"wang\",\"name\":\"王\"}";//一個示意json
List<User> users = JsonUtil.parseJsonList(json, User.class);//獲取到了指定型別的list
推薦fastjson
fastjson是alibaba提供的解決json相關的工具包,很好用。這個問題在fastjson我試了一下沒有問題,可以完美解決。
List<User> users= JSONObject.parseArray(json, User.class);
完美解決,推薦指數☆☆☆☆☆
我的部落格中有一個JsonUtil工具類,不定時更新,解決方法也在裡面
相關推薦
【exceptions】java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxxxx
這個問題是我在用jackson將字串準換成指定物件的List,轉換的時候沒有異常,但是通過for迴圈拿出物件使用的時候出現的問題.原來我的轉換是寫在controller裡面,後來為了通用準備寫到工具類中,但是發現一個問題,就是在controller中可以正
java.lang.ClassCastException: xxx.bean.XXX cannot be cast to xxx.bean.YYY
java.lang.ClassCastException: com.hahah.atcrowdfunding.bean.User cannot be cast to com.hahah.atcrowdfunding.bean.Role result寫錯了,應該是re
java.lang.ClassCastException: com.github.pagehelper.PageHelpercannot be cast to org.apache.Intercept
使用pagehelper外掛時出現的異常。 我原先mybatis的配置如下 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Con
java.util.LinkedHashMap cannot be cast to com.*** resetTemplate的GET請求返回值為帶泛型的型別
原因: resetTemplate的GET請求返回值為帶泛型的型別不可以直接使用,因為他內部封裝成了一個LinkedHashMap,所以我們直接用的時候就會報錯 解決:
java.util.LinkedHashMap cannot be cast to xxJavaBean
集合 obj arr 數據 linked shm 方式 style object // 前提/map.get("listKey")為List集合List<JavaBean> list = (List<JavaBean>) map.get("list
Spring Web's RestTemplate, exchange. java.util.LinkedHashMap cannot be cast to
public class ReturnData<E> implements Serializable { private int code; private E data; private String msg; pub
springboot分頁條件查詢java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.github.pageh
java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.github.pagehelper.Page at com.boku.www.service.impl.Projec
分頁外掛不起效果java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.github.pagehelper.Pa
錯誤程式碼 public List findUserPageFromMybatis(HttpServletRequest request, Integer pageNum, Integer pageSize) { pageNum = pageNum ==
(java筆記)ClassCastException: java.util.Date cannot be cast to java.sql.Date
目的 根據oracle資料庫中的一個日期欄位,利用Java程式碼自動更新資料庫中的資料。 難點 資料庫中的資料欄位為 LEASEDAY | DATE型別 在java這邊的條件為字串日期 yyyy-mm-dd | String型別 由
org.apache.catalina.util.DefaultAnnotationProcessor cannot be cast to org.ap解決方案
是tomcat的lib資料夾jar包和專案的lib檔案下的jar包衝突了 把專案下lib檔案下和tomcat的jar的重複的全部刪除。 注意,如果你是先建flex工程然後轉成web形式的,請把專案中tomcat類庫刪除,不然還會衝突 第二種解決辦法 &nb
【添加最新版本的mysql的jdbc連接jar包】java.math.BigInteger cannot be cast to java.lang.Long異常
復制 bubuko str 操作 cannot image cbe Beam 鏈接 【問題描述】 從我的電腦把項目拷貝到guo小中的win8電腦,but出現了那個錯誤,估計他的mysql是最新版本的。 【如何下載連接jar包】 鏈接:https://pan.bai
2類型轉換異常:Exception in thread "main" java.lang.ClassCastException:java.lang.Object cannot be cast to java.lang.Integer
cnblogs color pan rgs main string [] 類型 style public class TestException { public static void main(String[] args) { Object obj
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
protocol lang base arr ava ebs reat rac context 1、錯誤描寫敘述java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Str
WebLogic部署報java.lang.ClassCastException: weblogic.xml.jaxp.RegistrySAXParserFactory cannot be cast to javax.xml.parsers.SAXParserFactory
jar包 使用 jar包沖突 ava 項目 div factor c項目 sax 今天在部署WebLogic項目時,報了java.lang.ClassCastException: weblogic.xml.jaxp.RegistrySAXParserFactory cann
tomcat啟動報錯:java.lang.ClassCastException: org.apache.jasper.runtime.ELContextImpl cannot be cast to..
啟動tomcat的專案報錯如下: 解決思路: 1.看到這個錯誤,java.lang.ClassCastException: org.apache.jasper.runtime.ELContextImpl cannot be cast to org.apache.jasper.el.ELC
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
在開發中,遇到這麼一個錯誤: 報錯的意思: Long 無法轉化成Integer型別. 網上的解釋是: 這裡在Hibernate2.0之前版本list.get(0)返回的是Integer型別.但是在Hibernate3.0以後版本list.ge
java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
MySQL更新到8.0.11之後連線資料庫時會報出錯誤 Your login attempt was not successful, try again. Reason: Could not get JDBC Connection; nested exception is java.sql.SQ
Cause: java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.ibatis.mapping.MappedStatement
我用的是pagehelper 4.2.0,利用其進行表單的分頁處理並進行展示,在第一次執行的時候能夠看到分頁後的結果,重新整理一下第二次就顯示不出來,控制檯出現: Cause: java.lang.ClassCastException: java.lang.String cannot
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to java.lang.Int
異常:java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to java.lang.Integer 原因:SQL查詢結果為count()統計結果個數,gson返回資料為js
java lang ClassCastException java lang Integer cannot be ca
1、錯誤描述java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String service.impl.ArrivalBillServiceImpl.exportBillExce