java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxx 类型转换异常
程序员文章站
2022-04-19 13:38:11
错误场景:后端代码 项目中调取远程微服务返回的数据,用map集合接收数据进行处理,然后遍历集合信息的时候报错 !!!项目中后台Controller 报错代码如下:@RequestMapping("getsadaData")public Map> getSaData() {// 获取微服务的路径String url = sadaUrl + "sada/pm/getPmYsWs";// 服务返回的数据Wrapp...
错误场景:
-
后端代码 项目中调取远程微服务返回的数据,用map集合接收数据进行处理,然后遍历集合信息的时候报错 !!!
-
项目中后台Controller 报错代码如下:
@RequestMapping("getsadaData") public Map<String, List<YxtPmVO>> getSaData() { // 获取微服务的路径 String url = sadaUrl + "sada/pm/getPmYsWs"; // 服务返回的数据 WrappedResult info = restUtil.postForObject(url, MultiValueMap.class, null,WrappedResult.class, null,MediaType.APPLICATION_FORM_URLENCODED); // 用map集合接收数据 Map<String, ArrayList<YxtPmVO>> map = (Map<String, ArrayList<YxtPmVO>>) info.getData(); //集合信息 List<YxtPmVO> highList = null; // 获取map中value对象的信息 for (Map.Entry<String, List<YxtPmVO>> entry: map.entrySet()) { // 直接获取数组并转化为 实体的集合 highList = entry.getValue(); } //对集合信息进行遍历过滤的时候,报错! for (YxtPmVO yxtPmVO: highList) { } // 返回值 return data; }
-
报错信息如下:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.xxx.xxxx.entity.xxxx
-
错误解决方案:
原因是debug断点调试,发现返回的数据map是LinkedHashMap,获取得到的其实还是个map,而不是实体类
方案有以下两个:
1、
将map集合转成json,再转成实体类对象
2、
将数据集合,反序列化成对象
// 需要导的包 import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.type.TypeReference; ObjectMapper mapper = new ObjectMapper(); List<YxtPmVO> list = mapper.convertValue( highList, new TypeReference<List<YxtPmVO>>() { }); 这下再对list进行遍历 就ok了 !
本文地址:https://blog.csdn.net/JavaWebEngineer/article/details/107247364
上一篇: 语音到文字实现无缝衔接讯飞录音笔成记录领域“尖兵利器”
下一篇: Windows搭建Vue环境