解決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測(cè)試
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)對(duì)象,因此違背了 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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IDEA導(dǎo)入eclipse項(xiàng)目并且部署到tomcat的步驟詳解
這篇文章主要給大家介紹了關(guān)于IDEA導(dǎo)入eclipse項(xiàng)目并且部署到tomcat的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02Java操作XML轉(zhuǎn)JSON數(shù)據(jù)格式詳細(xì)代碼實(shí)例
在Java中我們可以使用一些現(xiàn)成的庫來實(shí)現(xiàn)XML到JSON的轉(zhuǎn)換,下面這篇文章主要給大家介紹了關(guān)于Java操作XML轉(zhuǎn)JSON數(shù)據(jù)格式的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04springboot的SpringPropertyAction事務(wù)屬性源碼解讀
這篇文章主要介紹了springboot的SpringPropertyAction事務(wù)屬性源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11SpringBoot如何取消內(nèi)置Tomcat啟動(dòng)并改用外接Tomcat
這篇文章主要介紹了SpringBoot如何取消內(nèi)置Tomcat啟動(dòng)并改用外接Tomcat,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11SpringMVC中控制器返回JSON數(shù)據(jù)的實(shí)現(xiàn)
本文主要介紹了SpringMVC中控制器返回JSON數(shù)據(jù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07SpringCloud2020 bootstrap 配置文件失效的解決方法
這篇文章主要介紹了SpringCloud2020 bootstrap 配置文件失效的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02SpringBoot使用Spring?Cache高效處理緩存數(shù)據(jù)
Spring?Cache是一個(gè)框架,只要簡(jiǎn)單加一個(gè)注解,就能實(shí)現(xiàn)緩存功能,本文主要介紹了SpringBoot使用Spring?Cache高效處理緩存數(shù)據(jù),感興趣的可以了解一下2023-11-11