一开始挺纳闷,我也返回的结果怎么会是LinkedHashMap呢?我代码里也没有用LinkedHashMap封装结果呀?
上网搜了一下发现:
因为rpc远程调用在底层还是使用的HTTPClient,所以在传递参数的时候,必定要有个顺序,当你传递map的时候map里面的值也要有顺序,不然服务层在接的时候就出问题了,所以它才会从map转为linkedhashMap!spring 有一个类叫ModelMap,继承了linkedhashMap public class ModelMap extends LinkedHashMap ,所以一个接口返回的结果就可以直接用ModelMap来接,注意ModelMap是没有泛型的,不管你返回的结果是什么类型的map,泛型是多复杂的map,都可以直接new一个Modelmap,用它来接返回的结果!
原文出处:spring cloud远程调用接口返回linkedHashMap问题
原来是这样。了解了原因之后,写个结果转换工具类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public class ConvertUtil {
/**
* 获取指定类对象
* @param result 远程调用结果
* @param targetClassInstance 指定类对象实例
* @return
*/
public static Object getFeignResult(Object result, Object targetClassInstance) {
ObjectMapper mapper = new ObjectMapper(); // 通过ObjectMapper获取映射
try {
Class<?> targetClass = Class.forName(targetClassInstance.getClass().getName()); // 获取指定对象类
return mapper.convertValue(result, targetClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
|
需要转换的时候,调用即可:
1
|
Student res = (Student) ConvertUtil.getFeignResult(studentService.loginByPassword(dto).getData(), new Student());
|