在调用feign接口时,返回一个DataResult对象,其中有一个字段是List<?>,我用具有相同字段的实体类进行强转,然后接收结果
List<实体类> list = (List<实体类>) result.get("data");
之后报错:ClassCastException java.util.LinkedHashMap cannot be cast to xxx
经过CSDN大神解疑找到原因: feign底层返回结果是Json格式,返回的List<泛型>需要指定实体类接收.
下面又加了两行代码 ,解决了问题
List<实体类> list = (List<实体类>) result.get("data");
ObjectMapper mapper = new ObjectMapper();
List<实体类> xxx= mapper.convertValue(list, new TypeReference<List<实体类>>() { });
ObjectMapper.convertValue()是用来进行类型转换的一个工具,TypeReference 是描述一个复杂泛型的工具类。
jackson objectMapper json字符串常用的方法
1.对象转json字符串
User user=new User();
String userJson=mapper.writeValueAsString(user);
2.json转换为对象
String json = "{\"name\":\"Test\"}";
Map userMap = mapper.readValue(json, test.class);
3.bean的转换
Class class = new ObjectMapper()
//这里直接将泛型转换为Class,
class.convertValue(某个泛型<T>, new TypeReference<Class>() {
});