SpringCloud 复杂对象接收时候对象变成LinkeHashMap
定义的接口如下
@GetMapping("/sys/user/info/{username}")
FwResult info(@PathVariable("username") String username);
FwResult 是一个返回的规范,格式如下
{
"code": 200|500,
"data": “数据”,
"meta": "分页信息",
"msg": "消息"
}
我们需要拿到的是FwResult 里的data 数据,并由接收方使用。
在调用的过程中出现了
java.util.LinkedHashMap cannot be cast to com.yisu.system.entity.SysUser
问题原因
因为rpc远程调用在底层还是使用的HTTPClient,所以在传递参数的时候,必定要有个顺序,当你传递map的时候map里面的值也要有顺序,不然服务层在接的时候就出问题了,所以它才会从map转为linkedhashMap!
解决方案
将接收到的数据先转JSON,再转实体
String jsonStr = JSONUtil.toJsonStr(fwResult.getData());
SysUser sysUser = JSONUtil.toBean(jsonStr,SysUser.class);
直接在远程调用的接口层定义返回结果的泛型
@GetMapping("/sys/user/info/{username}")
FwResult<SysUser> info(@PathVariable("username") String username);