• 首页
  • 邻居
  • 关于
  • 归档
  • 搜索
  • 夜间模式
    ©2020-2026  我的学习笔记 Theme by OneBlog

    我的学习笔记博客

    搜索
    标签
    # 随笔 # Java # 教程 # openwrt # Mysql # SQL # 爬虫 # post # Js调优 # MAVEN
  • 首页>
  • 随笔>
  • 正文
  • 类型转换异常:java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.

    2020年02月29日 1.8 k 阅读 0 评论 1175 字

    问题场景:

    1、前端传一个数组,

    2、后台Controller用map接收。如下

     @PostMapping("add/xxxx")
        public ResponseObj addXXXX(@RequestBody Map<String, Object> map){
    }
    

    3、Service业务类方法中,直接获取数组并转化为 实体的集合:

    List list = (List) map.get("list");

    4、然后使用拉姆达表达式对集合进行过滤的时候,报错!

    //所有名字集合 
    ArrayList<String> XXXXNameList = XXXXDao.getAllXXXXNameListById(id); 
    //过滤list,名字不在XXXXNameList中的
    List<XXXX> collect = list.stream().
                        filter(e -> !XXXXNameList.contains(e.getName())).collect(Collectors.toList());
    

    报错信息:

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

    分析:

    打断点调试,发现 map是LinkedHashMap,得到的其实是个map,而不是实体类。

    解决方案:

    1、将map转成json,在转成对象(这种方式比较简单,很多json工具方法都有)

    2、反序列化成对象

    List<XXX> list1 = (List<XXX>) map.get("list");
    ObjectMapper mapper = new ObjectMapper();
    List<XXX> list = mapper.convertValue(list1, new TypeReference<List<XXX>>() { });
    

    这下再对list过滤就ok了
    ————————————————
    版权声明:本文为CSDN博主「System.out.print」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_40841731/article/details/89394364

    本文著作权归作者 [ admin ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    取消回复

    发表留言
    回复

    首页邻居关于归档
    Copyright©2020-2026  All Rights Reserved.  Load:0.017 s
    京ICP备18019712号
    Theme by OneBlog V3.6.5
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。