【SpringCloud后端项目报错】java.util.LinkedHashMap cannot be cast to…异常处理

问题代码:

public Object getAjpc(ScreenDto screenDto) {

        String cgyBh = screenDto.getCgyBh();
		RestTemplate restTemplate = new RestTemplate();
        String CGYUrl = baseUrl+"api/v1/cgy?cgyBh={cgyBh}";
        JSONArray jsonArr = new JSONArray();
        
		List<JcVO> jcVOList = restTemplate.getForObject(CGYUrl, ArrayList.class, cgyBh);
        ......
}

异常原因:

在使用RestTemplate调用服务的时候,因为服务提供者返回的是一个List集合,所以期待返回类型写成ArrayList.class,
就报了java.util.LinkedHashMap cannot be cast to…这个异常,
但是调用过程中数据类型的变化是:服务提供者返回的是LIst集合,但是标记了@RequestBody,
所以返回的时候会把List集合转变成json的形式(内部是jackjson技术支持的),
像下面这种写法,

//        List<JcVO> jcVOList = restTemplate.getForObject(CGYUrl, ArrayList.class, cgybh);

就会再把提供者返回的json转变成list,
但是这个list跟之前不一样, (一个是jackjson转变的,一个是restTemplate转变的,可能内部机制不一样),
所以遍历集合就会报上面的异常.

改进方法:

接受一个json字符串,再使用阿里巴巴的fastjson将json字符串转变成list集合,

  		String jsonTemp = restTemplate.getForObject(CGYUrl, String.class, cgyBh);
        List<JcVO> jcVOList = JSON.parseArray(jsonTemp, JcVO.class);




此文章本人原创,如有问题底部留言,如有转载请标明出处。
--HurryChen

                      	Happy   Coding!

                         *\( ^ v ^ )/*
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值