欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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...

错误场景:

  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了 !
    
    

本文地址:https://blog.csdn.net/JavaWebEngineer/article/details/107247364