Jackson反序列化问题: java.util.LinkedHashMap cannot be cast to xx

解决:Jackson反序列化Java内部类失败(序列化后的识别码为LinkedHashMap,而非内部类本身) 问题描述 先看实体类: import com.fasterxml.jackson.annotation.*; import lombok.Data; import org.jeecg.common.system.base.entity.JeecgEntity; import org.jeecg.modules.iot.entity.jackson.WorkerConverter; import org.jeecg.modules.iot.entity.jackson.WorkersDeserializer; 阅读详情

转化对象带泛型时,必须使用 new TypeReference进行包装

正确写法

正确写法

	@RequestMapping("test2")
	public String test2() throws JsonProcessingException {
		ObjectMapper objectMapper = new ObjectMapper();
		Result<Result<User>> result = objectMapper.readValue("{\n" +
				"    \"data\": {\n" +
				"        \"data\": {\n" +
				"            \"username\": \"yq\"\n" +
				"        },\n" +
				"        \"msg\": \"test2\"\n" +
				"    },\n" +
				"    \"msg\": \"test1\"\n" +
				"}", new TypeReference<Result<Result<User>>>() {
		});
		log.info("result: {}",result);
		log.info("username: {}",result.getData().getData().getUsername());
		return "success";
	}

运行结果

2022-03-01 01:27:32.482  INFO 35456 --- [nio-8080-exec-1] xyz.yq56.read.controller.TestController  : result: Result(data=Result(data=User(username=yq), msg=test2), msg=test1)
2022-03-01 01:27:32.483  INFO 35456 --- [nio-8080-exec-1] xyz.yq56.read.controller.TestController  : username: yq

错误写法

错误写法,编译不会报错,完整信息也能正确打出来.但是当你访问泛型对象属性时,就会报错java.util.LinkedHashMap cannot be cast to xxx

	@RequestMapping("test3")
	public String test3() throws JsonProcessingException {
		ObjectMapper objectMapper = new ObjectMapper();
		Result<Result<User>> result = objectMapper.readValue("{\n" +
				"    \"data\": {\n" +
				"        \"data\": {\n" +
				"            \"username\": \"yq\"\n" +
				"        },\n" +
				"        \"msg\": \"test2\"\n" +
				"    },\n" +
				"    \"msg\": \"test1\"\n" +
				"}", Result.class);
		log.info("result: {}",result);
		log.info("username: {}",result.getData().getData().getUsername());
		return "success";
	}

运行结果:

2022-03-01 01:33:43.820  INFO 20936 --- [nio-8080-exec-3] xyz.yq56.read.controller.TestController  : result: Result(data={data={username=yq}, msg=test2}, msg=test1)
2022-03-01 01:33:43.830 ERROR 20936 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[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 xyz.yq56.read.model.Result] with root cause

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xyz.yq56.read.model.Result
	at xyz.yq56.read.controller.TestController.test3(TestController.java:59) ~[classes/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_281]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_281]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_281]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_281]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.37.jar:4.0.FR]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.37.jar:4.0.FR]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
Spring Boot Redis序列化配置:Jackson2JsonRedisSerializer解决ClassCastException 在分布式系统与微服务架构中,缓存是提升应用性能的核心技术之一。Redis作为高性能的键值存储,常被用作缓存层以减轻数据库压力。其工作原理是将数据以序列化形式存储,并在读取时反序列化还原。Java应用中,序列化机制的选择直接影响数据兼容性、可读性与跨语言交互能力。Jackson作为Java生态广泛使用的JSON处理库,其提供的Jackson2JsonRedisSerializer能够将对象序列化为人类可读的JSON格式,解决了Java原生序列化的强耦合与不可读问题。然而,配置不当会导致典型的ClassCast 阅读详情

相关推荐

Jackson ObjectMapper泛型反序列化:TypeReference与JavaType实战解析

在Java开发中,JSON与Java对象之间的序列化与反序列化是数据交换的核心技术。其原理基于Java反射机制和类型系统,通过类型描述将JSON结构映射为Java对象。这项技术的核心价值在于实现数据格式的无缝转换,广泛应用于API接口通信、配置文件解析和微服务间数据传输等场景。针对泛型集合如List<User>或Map<String, Object>,由于Java类型擦除机制,运行时无法保留泛型参数信息,直接使用List.class会导致反序列化结果不符合预期。Jackson库提供了TypeReferenc

weixin_33785108的博客 359

远程调用的结果已被序列化和反序列化 不是对象 不能强转 会报错误LinkedHashMap LinkedHashMap(List)转Json串 Json(串)转实体

报错:java.util.LinkedHashMap cannot be cast to com.qyj.domain.Person。Feign远程调用获取结果中的data。

tanzongbiao的专栏 776

VS2017中调用gdal(C#版)的方法二(含gdal下载地址,配置过程,代码测试,超详细!!)

VS2017中gdal(C#)版的配置与测试 上次记录了直接在VS2017中下载并应用gdal的方法,这次来记录一下网上下载的安装包配置与测试的方法。 一、环境、版本及下载地址 win10,vs2017社区版,gdal2.4.4 还是像之前在Unity中应用gdal一样,最好是下载已经编译好的C#版的gdal,不然自己配置真的很容易出错,我就是这样的,下面提供不同版本的gdal下载地址: 1.GDAL2.4.4(C#版、64位): https://download.csdn.net/download/che

chengbaola的博客 1366

Jackson: java.util.LinkedHashMap cannot be cast to X

本文翻译自:https://www.baeldung.com/jackson-linkedhashmap-cannot-be-cast 1.概述: Jackson是一个广泛使用的 Java 库,它允许我们方便地序列化/反序列化 JSON 或 XML。 有时,当我们尝试将 JSON 或 XML 反序列化为对象集合时,可能会遇到“java.lang.ClassCastException: java...

翎野君的博客 5796

Jetson设备EXT4文件系统修复实战:从superblock损坏到系统恢复

本文详细介绍了Jetson设备因异常断电等原因导致EXT4文件系统superblock损坏后的诊断与修复实战。通过从健康设备移植fsck工具、使用备份超级块等步骤,指导用户逐步恢复系统,并提供了数据备份与预防措施,帮助用户有效应对嵌入式AI开发中的存储故障。

theta的博客 595

SAP开发实战:用FI_DOCUMENT_CHANGE BAPI批量修改FB03凭证抬头和行项目文本(附完整ABAP代码)

本文详细介绍了如何使用SAP的FI_DOCUMENT_CHANGE BAPI批量修改FB03凭证抬头和行项目文本,提供完整的ABAP代码实现方案。通过该BAPI,开发者可以高效完成财务凭证的批量修改,确保数据一致性和审计合规性,显著提升SAP财务模块的运维效率。

weixin_29224589的博客 384

Jackson 复杂对象反序列化为 LinkedHashMap

1、情景描述 1. 客户端向网关发起 HTTP POST 请求,Content-Type = application/json,消息体为: { "custid": "client", // 应用id "appid": "sdeserver", // 服务端id "bean": "sdeBean", ...

qq_22398523的博客 6395

保姆级教程:用SAP PS管理电梯/大型设备项目(ETO/ATO模式)从成本收集到开票结算

本文详细解析了SAP PS模块在ETO/ATO项目中的全流程成本管理实践,特别针对电梯/大型设备制造行业。从成本收集到开票结算,通过WBS元素、网络活动等核心架构设计,结合F-02、CJ20N等事务代码,实现设计、生产、物流及现场服务各阶段的精准成本控制,助力企业提升项目利润率与财务效率。

weixin_30444105的博客 458

Jackson转换泛型List出现错误java.util.LinkedHashMap cannot be cast to com.xxx

使用stackoverflow上的代码描述这个问题: ObjectMapper mapper = new ObjectMapper(); List list = new ArrayList(); try { list = mapper.readValue(con.getInputStream(), ArrayList.class); } ca

泊川 4万+

硬核拆解华为/大疆/小米硬件面试真题:手撕电路+考点思维导图(附答案)

设计一个增益为20dB、带宽≥100kHz的同相放大器,电源电压±5V,要求输出摆幅≥8V。12位ADC的参考电压2.5V,输入信号1kHz正弦波,峰峰值2V。输入24V转5V/10A的同步降压电路,开关频率500kHz,计算MOSFET的损耗并选择型号(需提供TI官网截图)。设计无人机图传系统,要求1080P@30fps,传输距离2km。FPGA设计中,100MHz时钟域到50MHz时钟域传输32位数据,给出同步方案并画时序图。“设计一个输入12V、输出5V/3A的同步降压电路,给出关键参数计算”

qq_63103361的博客 3540

5个必知的脑网络图论指标:从聚类系数到小世界特性(附BCT工具包使用指南)

本文深度解析脑网络图论分析中五个核心指标:聚类系数、特征路径长度、全局效率、局部效率及节点效率,并详解其计算与解读。结合Brain Connectivity Toolbox工具包,提供从实战计算、常见报错解决到小世界特性统计检验的完整指南,帮助研究者跨越理论与实操鸿沟,让连接矩阵数据真正服务于神经科学研究。

blue42的博客 928

已解决:java.util.LinkedHashMap cannot be cast to Object

已解决:java.util.LinkedHashMap cannot be cast to Object问题描述解决方案问题总结 问题描述 在使用restTemplate发送HTTP请求获取返回值时,将其转换成List,然后进行遍历的时候报类型转换异常,也就是标题中的错误。 //响应实体类 public class ResultVO<T> { private Integer code; private String msg; private T data; } //HT

nijiangye的博客 7349

本文将详细介绍如何在 Qt (C++) 应用程序中集成 osgEarth,加载三维数字地球,并在指定经纬度添加三维模型(如飞机、建筑等)。

OSG 与 Qt 的交互通常需要处理 OpenGL 上下文。osgEarth 3.x 提供了对 Qt 的较好支持,或者可以使用。在普通 OSG 程序中,你需要手动处理坐标系转换将经纬度转为笛卡尔坐标 (XYZ)。这是实现的关键,将 OSG 的渲染循环集成到 Qt 的事件循环中。第三方库,但在本教程中,我们将展示一种通过继承。,将 Qt 的输入事件转换为 OSG 理解的。事件,这是实现交互(旋转地球、缩放)的基础。来嵌入 OSG 视图的标准方法。在这里我们初始化地球并添加模型。节点简化了这一过程。

qq_45859163的博客 1046

springboot 缓存 Cacheable 序列化: java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to

springboot 缓存反序列化失败: 项目使用 redis 来做缓存,使用 springboot 的 @Cacheable 缓存数据时,可以成功存入 redis, 但是在第二次请求命中缓存时,就会出现一下错误: java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to ... 经定位,确定了错误原因: 原因:springboot 的缓存使用 jackson 来做数据的序列化与反序列化,如果默认使用 Object 作为

Julyraining的博客 5309

webrtc进阶-- FlexFEC 实现原理与调试分析(m80 代码对齐版)

WebRTC 中 FlexFEC 技术解析与调试指南 摘要:本文深入分析 WebRTC 的 FlexFEC(灵活前向纠错)技术实现原理,重点探讨其在 m80 版本中的协商机制、接收侧恢复流程以及 SFU 场景下的特殊处理。文章指出 FlexFEC 通过动态冗余策略提升弱网抗丢包能力,详细解析了编解码器分配、SSRC 映射、包恢复等关键环节,并提供了针对 XR+SFU 场景的调试建议。调试时可重点关注 FEC 包接收与媒体包恢复日志,以验证链路有效性。

HOSTEN的博客 50

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxx解决

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxx解决

7me 3784

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

jackson:无法将java.util.LinkedHashMap强制转换为X

JsonJack:无法将java.util.LinkedHashMap强制转换为X 1.概述 Jackson是一个广泛使用的Java库,它使可以方便地对JSON或XML进行序列化/反序列化。 有时,当尝试将JSON或XML反序列化为对象集合时,可能会遇到“ java.lang.ClassCastException:java.util.LinkedHashMap无法转换为X”。 2.了解问题 让创建一个简单的Java应用程序来重现此异常,以了解何时会发生该异常。 2.1创建一个POJO类 public cla

盲目的拾荒者的博客 5927

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

RedisTemplate:class java.util.LinkedHashMap cannot be cast to class com.alibaba.fastjson.JSONObject

RedisTemplate反序列化提取报错:class java.util.LinkedHashMap cannot be cast to class com.alibaba.fastjson.JSONObject 原因是: 使用Jackson2JsonRedisSerializer序列化后的数据形式,如下: {"port":4214,"ip":"106.111.99.183","expire_time":"2021-02-04 20:53:28"} 为什么会报错? 序列化带泛型的数据时,会以ma

xianrenmodel的博客 5093

Redis获取缓存异常:java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXX

项目运行报错如下: 经过debug查看,从redis获取的值为LinkedHashMap,而是不是我们的实体类testinfo 经过查找代码中Jackson2JsonRedisSerializer使用的事object对象,然后反序列化就会默认为java.util.LinkedHashMap类型 因此对以上代码进行修改: package com.sinosoft.util; import com.fasterxml.jackson.annotation.JsonAutoDete..

心寒的博客 5612

使用springboot中的@Cacheable报错类转换异常class java.util.LinkedHashMap cannot be cast to class

的实例来表示 JSON 数据的键值对结构,特别是当 Jackson 没有具体的类型信息来实例化特定的对象类型时。所以在业务层中把持久层访问的对象转为LinkedHashMap 类型即可。Jackson 反序列化过程通常会生成一个。因为在缓存管理器中配置的是使用。对象作为值的序列化器。

TTruYi的博客 1408

jackson - java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXX

class Person<T> implements java.io.Serializable { private String name; private T car; ... //setter ...// getter } class BenzCar implements java.io.Serializable { private String color; private int price; ... //setter ...// getter } public st

rick_zyl的博客 896

SpringBoot使用spring-data-redis获取json数据后,遍历数据 java.util.LinkedHashMap cannot be cast to xxx异常

SpringBoot使用spring-data-redis获取json数据后,遍历数据 java.util.LinkedHashMap cannot be cast to xxx异常 配置如下 private Jackson2JsonRedisSerializer<Object> getJackson2JsonRedisSerializer() { Jackson2Js...

h1525947163的博客 1510

Java:RestTemplate返回值报错LinkedHashMap cannot be cast

使用SringBoot提供的RestTemplate发起http请求,类型转换成了。不用具体的对象接收返回数据,直接使用字符串接收,接收到之后再用。

彭世瑜的博客 789

Map转换list抛异常java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.xxx

问题描述: 类型转换异常:java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com. 后端接收数据代码: @Override public void run(Map<String, Object> requestMap){ List<XXX> list = (List<XXX>) json.get("list") ...

Mr_tianhong的博客 644

打混淆包的时候 遇到一个 java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to ..问题

-keepattributes *Annotation*,Signature

梦想无论怎样模糊,总潜伏在我们心底,使我们的心境永远得不到安宁. 7190
上一篇: [2021]年度反思总结
下一篇: 数据结构:队列之循环队列
一步一结
博客等级 码龄7年 50粉丝 65原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值