解决java.util.LinkedHashMap cannot be cast to 实体类…的问题
背景描述
在写微服务项目黑马商城的时候,在搜索服务的测试类通过feign的接口客户端远程调用商品服务接口的时候,搜索服务测试类方法中得到的返回的值PageDTO类对象中的List<Item>对象遍历后居然不是Item,而是LinkedHashMap,可知远程调用会将待转换的数据转换成LinkedHashMap,而将其转换成想要的数据类型,肯定行不通,会报上面的异常。
参考网友的博客并得到解决,说是使用RestTemplate远程调用的时候出现的类似问题。但我并没有使用RestTemplate,不过也解决了,解决方式如下:
List<Item> remoteList = pageDTO.getList();
String jsonStr = JSON.toJSONString(remoteList);//依旧使用alibaba提供的json转换工具,需要fastjson依赖
List<Item> items = JSONObject.parseArray(jsonStr, Item.class);
for (Item item : items) {
ItemDoc itemDoc = new ItemDoc(item);
String json = JSON.toJSONString(itemDoc);
bulkRequest.add(new IndexRequest("item").id(itemDoc.getId().toString()).source(json, XContentType.JSON));
}