JudeJoo 2019-09-29
项目使用spring-boot2.x,在使用spring-cloud时,使用feign调用其它子系统的接口,刚开始的时候返回的对象就是一个Object的,包含有state, message, data三个属性,其中 data为Object的排指定类型,原以为调用接口在返回后,通过强制转换就可能得到所要的对象,通过swagger的测试也返回了正常的json数据。但是在正常java代码调用过程中,得到的类型是LinedHashMap,强制转换类型是就提示类型转换失败,抛异常了。
花了半天时间在网上找了一堆资料,尝试添加代码转换工具,如ObjectMapper这些转换的,不是包不对,就是其它一堆问题。
然后把Object类型转换为<T>的泛型,在接口和后台api的实现方法上同样指定一个返回的数据类型,再一调用,居然通过了,输出的数据也正常。
接口定义:
@PostMapping("/api/getDeptInfoById") public ApiResponse<DeptInfo> getDeptInfoById(@RequestParam(value="deptId", required=true)Long deptId);
ApiResponse:
public class ApiResponse<T> implements Serializable { /** * 返回状态,默认为0表示正常 */ private int state = 0; /** * 当出错时state!=0,返回的错误文字描述 */ private String message; /** * 正常业务逻辑下返回的数据 */ private T data; ... }
调用时:
ApiResponse<DeptInfo> res = client.getDeptInfoById(1l); DeptInfo deptInfo = res.getData(); System.out.println(deptInfo);