3月8

转换异常:java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.heckjj.apps.modules.smartpush.dto.RecommendDTO(实体类)

| |
11:17编程杂谈  From: 本站原创
1、前端封装JSON值,后台需要List<实体类>接收

Map map = jsonObject.getInnerMap();
List<RecommendDTO> recommendDTOlist = (List<RecommendDTO>) map.get("xxx");

2、进行forearch循环的时候报错

recommendDTOlist .forEach((item)->{})

3、从redis中获取数据后进行遍历
List<RecommendDTO> recommendDTOlist = redisUtil.get(defaultCacheKey);
for (RecommendDTO recommendDTO : defaultRecommendList) {

}

报错信息:

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.heckjj.apps.modules.smartpush.dto.RecommendDTO

4、打断点调试查看发现里面封装的是两个Map 而不是实体类而是个LinkedHashMap

5、解决方法

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

记住引入包路径是下面这两个

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

来源:Heck's Blog
地址:https://www.heckjj.com/post/645/
转载时须以链接形式注明作者和原始出处及本声明,否则将追究法律责任,谢谢配合!
阅读(854) | 评论(0) | 引用(0)