多种方式解决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…的几种解决思路,我个人喜欢第一种,如有什么问题,欢迎讨论留言


相关文章
|
17天前
|
Java 开发工具
开发工具系类 之 Cannot determine path to ‘tools.jar‘ library for 17 (D:/Program Files/Java/jdk-17.0.9)
这篇文章讲述了作者在升级JDK至17版本后遇到IDEA无法识别`tools.jar`的问题,并提供了两种解决方法:升级IDEA版本或降低JDK版本,并提供了相关版本的IDEA兼容性信息。
开发工具系类 之 Cannot determine path to ‘tools.jar‘ library for 17 (D:/Program Files/Java/jdk-17.0.9)
|
12天前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
|
9天前
|
算法 Java 测试技术
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
|
19天前
|
Java 测试技术 Docker
记录一次很坑的报错:java.lang.Exception: The class is not public.
这篇文章记录了作者在Docker中运行服务进行单元测试时遇到的一系列问题,包括Spring Boot与Spring Cloud版本不一致、Bean注入问题、测试单元引入问题以及公共类和方法的可见性问题,并提供了解决问题的方法和成功测试通过的代码示例。
记录一次很坑的报错:java.lang.Exception: The class is not public.
|
20天前
|
SQL Java Apache
实时计算 Flink版操作报错合集之使用parquet时,怎么解决报错:无法访问到java.uti.Arrays$ArrayList类的私有字段
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
13天前
|
SQL Java 数据库连接
【Azure 应用服务】Java ODBC代码中,启用 Managed Identity 登录 SQL Server 报错 Managed Identity authentication is not available
【Azure 应用服务】Java ODBC代码中,启用 Managed Identity 登录 SQL Server 报错 Managed Identity authentication is not available
|
13天前
|
开发工具 数据安全/隐私保护
【Azure Developer】使用MSAL4J 与 ADAL4J 的SDK时候,遇见了类型冲突问题 "java.util.Collections$SingletonList cannot be cast to java.lang.String"
【Azure Developer】使用MSAL4J 与 ADAL4J 的SDK时候,遇见了类型冲突问题 "java.util.Collections$SingletonList cannot be cast to java.lang.String"
|
13天前
|
Java 开发工具 Spring
【Azure Spring Cloud】使用azure-spring-boot-starter-storage来上传文件报错: java.net.UnknownHostException: xxxxxxxx.blob.core.windows.net: Name or service not known
【Azure Spring Cloud】使用azure-spring-boot-starter-storage来上传文件报错: java.net.UnknownHostException: xxxxxxxx.blob.core.windows.net: Name or service not known
|
Java
【Java学习笔记】控制台读写
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ import java.io.Console; public class ConsoleLogin { public static void main(String arg[]) { Console con; con = System.
490 0
下一篇
DDNS