LinkedHashMap cannot be cast to xxx解决方法

    科技2022-08-22  133

    最近在做一个分布式项目,在远程调用的时候出现了一个问题,先上代码

    服务提供者

    @GetMapping("/article/byType/{type}") @ResponseBody private List<Article> selectByType(@PathVariable("type") Integer type){ return articleService.selectTextByType(type); }

    我们这里是想要查询出来同属一个类型的文章,服务的详细代码不再赘述。我们再来看看服务消费者这边

    @GetMapping({"/","/index"}) public String selectByType(Model model){ List<ServiceInstance> instances = discoveryClient.getInstances("SERVICE-PROVIDER"); ServiceInstance instance = instances.get(0); URI uri = instance.getUri(); String url = uri+"/article/byType/"+2; List<Article> articleList = restTemplate.getForObject(url, List.class); for (Article article : articleList) { System.out.println(article.getArticleTitle()); } //... }

    在测试的时候,我本来是想先输出看一下结果的,也就是上面的代码,结果却发现出错了 类型转换异常,说是LinkedHashMap无法转换成Article,这是为什么?

    我们来看一看我们遍历的到底是个什么玩意儿

    原来给我们返回的是一个LinkedHashMap的List集合,所以才会出现这个类型转换错误。我们接下来看看解决办法

    1、我们需要先导入一个fastjson的包。

    2、我们需要先将返回过来的值变成一个Json字符出串。

    3、然后我们可以使用fastjson中的工具类将这个Json字符串转换成一个List集合。

    public String selectByType(Model model){ List<ServiceInstance> instances = discoveryClient.getInstances("SERVICE-PROVIDER"); ServiceInstance instance = instances.get(0); URI uri = instance.getUri(); String url = uri+"/article/byType/"+2; List articleMap = restTemplate.getForObject(url, List.class); // 我们需要先将返回过来的值变成一个Json字符出串。 String s = JSON.toJSONString(articleMap); // 将这个Json字符串转换成一个List集合。 List<Article> articleList = JSONObject.parseArray(s, Article.class); ArrayList<Article> articles = new ArrayList<>(); for (Article art : articleList) { articles.add(art); } }

    Processed: 0.025, SQL: 9