OpenFeign远程调用本该返回实体对象但却返回LinkedHashMap集合

远程调用 feign 接口,该接口返回的是 “List<AssemblyNameVo>” ,也就是 List<实体类> 对象,但是调用者在实际接收的时候,得到的却是 “List<LinkedHashMap>” 对象

远程接口如下:
在这里插入图片描述
feign 的接口如下:

在这里插入图片描述
可以看到,调用者在请求该 feign 接口后,返回的对象是 “List<LinkedHashMap>” ,而不是我上面定义的实体类对象 “List<AssemblyNameVo>”

在这里插入图片描述
使用格式强制转换也没用,导致向下执行会报错:
java.util.LinkedHashMap cannot be cast to XXX对象

在这里插入图片描述
至于为什么返回的数据为什么会变成 LinkedHashMap,网上查了下原因,大致回复都是:

因为rpc远程调用在底层还是使用的HTTPClient,所以在传递参数的时候,必定要有个顺序,当你传递集合(list/map)的时候集合里面的值也要有顺序,不然服务层在接的时候就出问题了,所以它才会从list转为linkedhashMap!

解决办法:

  1. 修改调用者的接口,定义接收的具体实体对象,feign 在返回时会自动转换类型;

在这里插入图片描述

  1. 项目引入 com.alibaba.fastjson 依赖包,使用 JSONObject.toJSONString() 方法 将 feign 返回的数据转成 json 字符串,再使用 JSONObject.parseArray() 将该 json 字符串 转成自己的实体类类型

在这里插入图片描述

两种方式经本人测试都能正确的获取到预期的数据格式,这里本人采用第二种方法,感觉比较安全且规范;

这里看到返回的 data 依旧是 “List<LinkedHashMap>”

在这里插入图片描述

经过 JSONObject.parseArray() 转换后,已变成我们预期的实体类集合

在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值