spring-cloud分布式接口调用提示LinedHashMap的类型转换错误解决方法

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);

相关推荐

greent00 / 0评论 2020-05-29