解決fastjson泛型轉(zhuǎn)換報(bào)錯(cuò)的解決方法
Exception in thread "main" java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.xh.demo.UserDO
泛性類
@Data
public class ResultSetDTO<T> {
private Integer totalSize;
private Integer count;
private List<T> records;
}
實(shí)體類
@Data
public class UserDO {
private String id;
private String name;
}
Demo測試
public class AppDemo {
public static void main(String[] args) {
ResultSetDTO<UserDO> resultSetDTO = new ResultSetDTO<UserDO>();
resultSetDTO.setTotalSize(10);
resultSetDTO.setCount(10);
List<UserDO> list = new ArrayList<>();
UserDO userDO = null;
for (int i = 10000; i < 10003; i++) {
userDO = new UserDO();
userDO.setId(i + "");
userDO.setName("TEST_" + i);
list.add(userDO);
}
resultSetDTO.setRecords(list);
String jsonString = JSON.toJSONString(resultSetDTO);
System.out.println(jsonString);
ResultSetDTO<XsyUserDO> resultSet = JSON.parseObject(jsonString, ResultSetDTO.class);
List<UserDO> records = resultSet.getRecords();
// 轉(zhuǎn)換是報(bào)異常
for (UserDO user : records) {
System.out.println(user.getName());
}
}
debuge 調(diào)試時(shí)發(fā)現(xiàn) resultSet.getRecords(); 返回的是 ArrayList<JSONObject> 類型,不是 ArrayList<UserDO> 類型。由于類型引用必須強(qiáng)制指定目標(biāo)對象,因此違背了 FastJson 規(guī)范,所以報(bào):Exception in thread "main" java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.xh.demo.UserDO。

解決方法
// 方法一
JSONObject parseObject = JSON.parseObject(jsonString);
List<UserDO> records = JSON.parseArray(parseObject.getString("records"), UserDO.class);
for (UserDO user : records) {
System.out.println(user.getName());
}
// 方法二
ResultSetDTO<XsyUserDO> resultSet = JSON.parseObject(jsonString, ResultSetDTO.class);
List<UserDO> records = JSONObject.parseArray(resultSet.getRecords().toString(), UserDO.class);
for (UserDO user : records) {
System.out.println(user.getName());
}
// 方法三
ResultSetDTO<XsyUserDO> resultSet = JSON.parseObject(jsonString, new TypeReference<ResultSetDTO<UserDO>>(){});
List<UserDO> records = resultSet.getRecords();
for (UserDO user : records){
System.out.println(user.getName());}
}
到此這篇關(guān)于解決fastjson泛型轉(zhuǎn)換報(bào)錯(cuò)的解決方法的文章就介紹到這了,更多相關(guān)fastjson 泛型轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Spring系列之@ComponentScan批量注冊bean
本文介紹各種@ComponentScan批量掃描注冊bean的基本使用以及進(jìn)階用法和@Componet及其衍生注解使用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2022-02-02
Java實(shí)現(xiàn)批量修改文件名和重命名的方法
這篇文章主要介紹了Java實(shí)現(xiàn)批量修改文件名和重命名的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
sharding-jdbc5.0.0實(shí)現(xiàn)分表實(shí)踐
本文主要介紹了sharding-jdbc5.0.0分表實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
舉例說明JAVA調(diào)用第三方接口的GET/POST/PUT請求方式
在日常工作和學(xué)習(xí)中,有很多地方都需要發(fā)送請求,這篇文章主要給大家介紹了關(guān)于JAVA調(diào)用第三方接口的GET/POST/PUT請求方式的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01
Java輕松實(shí)現(xiàn)權(quán)限認(rèn)證管理的示例代碼
我們在實(shí)際開發(fā)中經(jīng)常會(huì)進(jìn)行權(quán)限認(rèn)證管理,給不同的人加上對應(yīng)的角色和權(quán)限,本文將實(shí)現(xiàn)一個(gè)簡易的權(quán)限驗(yàn)證管理系統(tǒng),感興趣的小伙伴可以了解下2023-12-12
Spring Data Jpa+SpringMVC+Jquery.pagination.js實(shí)現(xiàn)分頁示例
本文介紹了Spring Data Jpa+SpringMVC+Jquery.pagination.js實(shí)現(xiàn)分頁示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
Java異常鏈表throw結(jié)構(gòu)assert詳細(xì)解讀
這篇文章主要給大家介紹了關(guān)于Java中方法使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08
基于Spring-Security自定義登陸錯(cuò)誤提示信息
這篇文章主要介紹了Spring-Security自定義登陸錯(cuò)誤提示信息,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
redis.clients.jedis.exceptions.JedisAskDataException異常解決
redis.clients.jedis.exceptions.JedisAskDataExceptio異常是在使用Jedis客戶端與Redis集群交互時(shí)遇到的一種重定向異常,本文就來介紹一下解決方法,感興趣的可以了解一下2024-05-05

