多种方式解决Java控制台报错 java.util.LinkedHashMap cannot be cast to.....

简介: 笔记

问题描述


今天在使用RestTemplate调用服务的时候,因为服务提供者返回的是一个List集合,所以在使用消费者调用的时候,restTemplate.getForObject()期待返回的类型直接写成了List.class

相关代码如下

 public List<DocInfoRela> getFilePath() {
        String url = serviceUrl + "/common/getFilePath";
        List<DocInfoRela> docInfoRelas = restTemplate.getForObject(url, List.class);
        return docInfoRelas;
    }

生产者代码30.png

消费者代码


31.png

但是接收到List之后,在便利的时候却报错了,报错内容如下:


java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to cn.chinatowercom.postaccounting.entity.DocInfoRela


ERROR 2022-11-17 15:09:32 [dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to cn.chinatowercom.postaccounting.entity.DocInfoRela] with root cause


相关代码和如图截图:

32.png

解决问题


方式1

我个人比较喜欢这种方案

定义返回List

33.png

    public  List<DocInfoRela> getFilePath() {
        String url = serviceUrl + "/common/getFilePath";
        List<DocInfoRela> docInfoRelas = restTemplate.getForObject(url, List.class);
        return docInfoRelas;
    }

然后将list再次转为json串,然后由json串再转为list

34.png

代码如下

    // 从数据库获取到数据
            List<DocInfoRela> DocInfoRelasList = this.getFilePath();
            // 将list再次转为json串,然后由json串再转为list
            String docInfoRelaStrings = JSON.toJSONString(DocInfoRelasList);
            DocInfoRelasList = JSON.parseArray(docInfoRelaStrings, DocInfoRela.class);

方式2

返回结果以String类型接受,也即接受的是一个json字符串

35.png

代码如下

public String getFilePath() {
        String url = serviceUrl + "/common/getFilePath";
        String docInfoRelas = restTemplate.getForObject(url, String.class);
        return docInfoRelas;
    }

然后再使用阿里巴巴的fastjson将json字符串转变成list集合


36.png

代码如下

       // 从数据库获取到文件路径
            String jsonString = this.getFilePath();
            // 将json字符串转集合
            List<DocInfoRela> docInfoRelas = JSON.parseArray(jsonString, DocInfoRela.class);
       // 从数据库获取到文件路径
            String jsonString = this.getFilePath();
            // 将json字符串转集合
            List<DocInfoRela> docInfoRelas = JSON.parseArray(jsonString, DocInfoRela.class);

方式3

备注:这个我没有试过,在网上找到的一种方案

首先导入net.sf.json 类

    <dependency>
       <groupId>net.sf.json-lib</groupId>
       <artifactId>json-lib</artifactId>
       <version>2.3</version>
       <classifier>jdk15</classifier>
     </dependency>

然后 使用JSONObject中的方法, 先将数据转成json字符串, 在转成实体对象即可。

JSONObject jsonObject=JSONObject.fromObject(objectStr); // 将数据转成json字符串
Person per = (DocInfoRela)JSONObject.toBean(jsonObject, DocInfoRela.class); //将json转成需要的对象

总结


以上就是遇到java.util.LinkedHashMap cannot be cast to…的几种解决思路,我个人喜欢第一种,如有什么问题,欢迎讨论留言


相关文章
|
14天前
|
Java Maven
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
在Java项目中,启动jar包时遇到“no main manifest attribute”错误,且打包大小明显偏小。常见原因包括:1) Maven配置中跳过主程序打包;2) 缺少Manifest文件或Main-Class属性。解决方案如下:
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
|
3天前
|
Java Windows
【Azure Function】部署Java Function失败:报错deploy [ERROR] Status code 401和警告 'China North 3' may not be a valid region
1:deploy [ERROR] Status code 401, (empty body). 2: China North 3 may not be a valid region,please refer to https://aka.ms/maven_function_configuration#supported-regions for values. 3:  <azure.functions.maven.plugin.version>1.36.0</azure.functions.maven.plugin.version>
20 11
|
2月前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
160 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
2月前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
2月前
|
安全 小程序 Java
Java“AccessControlException”报错解决
Java中的“AccessControlException”通常发生在尝试访问受安全策略限制的资源时。解决方法包括:1. 检查安全策略文件(java.policy)配置;2. 确保代码具有足够的权限;3. 调整JVM启动参数以放宽安全限制。
203 1
|
8月前
|
Java
java实战项目超市管理系统控制台版
java实战项目超市管理系统控制台版
104 0
|
8月前
|
Java
【Java开发指南 | 第二十篇】Java流之控制台
【Java开发指南 | 第二十篇】Java流之控制台
75 2
|
8月前
|
XML 监控 Dubbo
Dubbo03【管理控制台和监控中心搭建】,Java开发实用必备的几款插件
Dubbo03【管理控制台和监控中心搭建】,Java开发实用必备的几款插件
|
8月前
|
存储 Java 关系型数据库
景区特色商品管理系统【控制台+MySQL】(Java课设)
景区特色商品管理系统【控制台+MySQL】(Java课设)
110 1
|
8月前
|
存储 Java 关系型数据库
银行储蓄管理系统【控制台+MySQL】(Java课设)
银行储蓄管理系统【控制台+MySQL】(Java课设)
157 1