java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxx 类型转换异常

错误场景:

  1. 后端代码 项目中调取远程微服务返回的数据,用map集合接收数据进行处理,然后遍历集合信息的时候报错 !!!

  2. 项目中后台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;
    }
    
  3. 报错信息如下:

    java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.xxx.xxxx.entity.xxxx

  4. 错误解决方案:

    原因是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了 !
    
    

你可能感兴趣的:(error解决方案)