java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXX
今天在用feign进行远程调用的时候报错java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXX
类型转换异常
- 这里是consumer调用方
logger.info("添加评论方法被调用前端传来的参数是comment-->{},request--->{}", comment, request);
// 获取用户的id
String memberId = JwtUtils.getMemberIdByJwtToken(request);
if (StringUtils.isEmpty(memberId)) {
return ResultEntity.failed().message("请登录!").code(28004);
}
comment.setMemberId(memberId);
// 根据用户的id获取用户的信息,用户的头像和昵称
ResultEntity entity = commentClient.getInfo(memberId);
Map<String, Object> data = entity.getData();
System.out.println("data = " + data);
UserCommentVo commentVo = (UserCommentVo) data.get("userCommentVo");
logger.info("传入的usercommentvo是----->{}", commentVo);
// 将用户的昵称和头像设置到评论表中,然后在保存到数据库中
comment.setNickname(commentVo.getNickname());
comment.setAvatar(commentVo.getAvatar());
commentService.save(comment);
- 这里是provider提供方
/**
* 根据token字符串获取用户信息,token字符串是从路径中传递过来的
* @param id
* @return
*/
@GetMapping("/getInfoUc/{id}")
@ResponseBody
public ResultEntity getInfo(@PathVariable("id") String id) {
// 根据用户id获取用户信息
UcenterMember member = memberService.getById(id);
UserCommentVo userCommentVo = new UserCommentVo();
if (!Objects.equals(null, member)) {
BeanUtils.copyProperties(member, userCommentVo);
}
return ResultEntity.success().data("userCommentVo", userCommentVo);
}
本来想着在ResultEntity中直接得到map,然后map中获取key对应的value值,强转成所需要的对象,但是报错类型转换异常。
后面参考了其他贴子,
- 先将map转成json,在转成对象(这种方式比较简单,很多json工具方法都有)
- 再将json转换成你要转换的对象即可
Gson gson = new Gson();
Object userCommentVo = data.get("userCommentVo");
String json = gson.toJson(userCommentVo);