SpringCloud 复杂对象接收时候对象变成LinkeHashMap

定义的接口如下

  1. @GetMapping("/sys/user/info/{username}")
  2. FwResult info(@PathVariable("username") String username);

FwResult 是一个返回的规范,格式如下

  1. {
  2. "code": 200|500,
  3. "data": “数据”,
  4. "meta": "分页信息",
  5. "msg": "消息"
  6. }

我们需要拿到的是FwResult 里的data 数据,并由接收方使用。
在调用的过程中出现了

  1. java.util.LinkedHashMap cannot be cast to com.yisu.system.entity.SysUser

问题原因

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

解决方案

  1. 将接收到的数据先转JSON,再转实体

    1. String jsonStr = JSONUtil.toJsonStr(fwResult.getData());
    2. SysUser sysUser = JSONUtil.toBean(jsonStr,SysUser.class);
  2. 直接在远程调用的接口层定义返回结果的泛型

    1. @GetMapping("/sys/user/info/{username}")
    2. FwResult<SysUser> info(@PathVariable("username") String username);