错误场景:
-
后端代码 项目中调取远程微服务返回的数据,用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了 !
本文详细解析了一种常见的后端开发场景下,从微服务获取数据并转换为特定实体类过程中遇到的ClassCastException错误。通过debug定位问题所在,发现返回数据类型与预期不符,最终采用两种解决方案成功处理:一是将map集合转换为JSON再反序列化为实体类;二是直接进行数据集合的反序列化。文章提供了具体代码实现,帮助读者快速定位并解决类似问题。
2592





