SpringBoot从Redis中取出缓存的对象,但却出现同一类型对象无法转换为同一类型的对象问题java.lang.ClassCastException:

Redis存Long取出时报类型转换错误java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long 在SpringBoot中,最近使用RedisTemplate来对redis进行操作,但是我们会发现,当我们修改了RedisTemplate的序列化方式之后,在存取Long类型数据时,会发生一些问题。存入对象,在代码中使用Long类型接收,结果报类型转换错误。 阅读详情

问题:

从Redis中取出的缓存对象,出现同一类型转换错误

最近在写Springboot项目,用到Redis缓存对象User,通过key取出来后的value并赋值给同一类型的对象,但是却出现了一个神奇的报错,同一对象无法转换为同一对象的报错,这个问题我还是第一次见,刚开始真的百思不得其解

java.lang.ClassCastException: com.blog.bean.User cannot be cast to com.blog.bean.User

解决:

开始试着找错误,在test上看能不能打印取出的缓存对象信息,开始是直接用Object类接收,打印信息完全一致,是我想要的东西;后面转换为实体类的类型User,神奇的是在springboot上的测试类上却能运行成功,没有报错,类型能成功转换,真的是伤脑筋。

最后无奈开启百度大法

终于解决:

把springboot热部署DevTools工具去掉

<!--<dependency>-->
    <!--<groupId>org.springframework.boot</groupId>-->
    <!--<artifactId>spring-boot-devtools</artifactId>-->
    <!--<optional>true</optional>-->
<!--</dependency>-->

原因:

当User对象被序列化并存到Redis缓存里时,使用的类加载器是C1,而在此之后你改变了一些代码或者配置文件的时候,DevTools工具将会自动重新启动这个容器,并且创建一个新的类加载器 C2,这时前后两次加载User类的类加载器就不同了,两个不同类加载器加载的两个对象,JVM会认为这是两个不同的对象。

也就是Springboot为了实现代码热部署破坏了双亲委派模型,导致(User类)的类加载器由AppClassLoader变了Springboot的自定义加载器RestartClassLoader。

只有类全称相同且类加载器相同,JVM才认为类是相同的,你两次生成的对象调用不同的类加载器,虽然是同一类型的对象,但是JVM就会认为这是两个不同的对象,因此也就无法完成类型的转换。

SpringBoot中操作Redis解析JsonArray数据为对象List(ruoyi字典值sys_dict为例) 在上面搭建系统的基础上,会将系统的字典值缓存进redis中。看数据格式存储的是Json数组,如何从redis中读取并解析成对象的list从而进行数据处理。 阅读详情

相关推荐

ZYNQ软件复位重启、程序跳转的实现方法(Multiboot)

目录一、增加FSBL的调试信息 一、增加FSBL的调试信息 启动过程的调试信息如下: Xilinx First Stage Boot Loader Release 2016.4 Jan 19 2020-10:35:00 Devcfg driver initialized Silicon Version 3.1 Boot mode is QSPI Single Flash Informat...

weixin_41922484的博客 2万+

springboot-Redis工具类&对象与字符串互转&响应结果类

一、Redis工具类 /** * 功能描述:redis工具类 */ @Component public class RedisClient { @Autowired private StringRedisTemplate redisTpl; //jdbcTemplate /** * 功能描述:设置key-value到redis中 * ...

q_2540638774的博客 648

若依(RuoYi)框架从零到部署:Spring Boot+Vue权限系统完整配置指南

在Java企业级应用开发中,Spring Boot作为构建微服务和单体应用的基石,极大地简化了项目初始化和配置流程。其核心原理在于通过自动配置和起步依赖,快速整合数据访问、安全认证、缓存等常用模块,显著提升开发效率。这一技术价值在需要快速构建后台管理系统的场景中尤为突出,例如权限管理、用户角色分配等通用需求。若依(RuoYi)框架正是基于Spring Boot和Vue.js的优秀实践,它封装了RBAC权限模型、代码生成器等高频功能,提供了开箱即用的解决方案。本文聚焦于若依框架的【环境配置】与【项目部署】,通

weixin_33984032的博客 455

Spring----Spring入门

Spring由来 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由OP),目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。 Spring的体系结构 Spring开发环境的构建 Spring的核心容器 Spring的入门程序 ...

程序研博客 1082

Rapid SCADA MQTT

一、配置RapidSCADA 1、准备KpMqtt.dll、Jint.dll库文件,从网盘下载。 2、将以上两个文件拷贝到SCADA安装目录的Comm/KP目录下,如下: C:\SCADA\ScadaComm\KP 3、新建SCADA项目 4、新建Line 5、新建Device 6、拷贝Config目录下的KpMqtt_001.xml文件、KpMqtt_Job.js文件到项目Comm\Config下,如下示例链接 C:\SCADA\Projects\MQTTProject\Instances\Defau

mumanquan1的博客 3006

⑩电子产品拆解分析-家用无线遥控开关433Mhz

①免布线随意贴,装上就能使用解决单线开关烦恼;②遥控配对简单,无线通讯距离长,信号可穿墙;

a6662580的博客 4683

Redis get获取数据转化对象时报错 Could not read JSON: Cannot construct instance of `com.web.core.dto.UserInfo`

ERROR o.a.c.c.C.[.[localhost].[/].[dispatcherServlet] -Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.spr...

thunder-1 2510

图像紫边消除(depurple)

对图像紫边形成原因、消除方法进行了介绍。

沧海一升的博客 7564

springboot从Redis中取出缓存的对象,但却出现同一类型对象无法转换为同一类型的对象问题java.lang.ClassCastException:

问题: 从Redis中取出的缓存对象,出现同一类型转换错误 最近在写Springboot项目,用到Redis缓存对象User,通过key取出来后的value并赋值给同一类型的对象,但是却出现了一个神奇的报错,同一对象无法转换为同一对象的报错,这个问题我还是第一次见,刚开始真的百思不得其解 java.lang.ClassCastException: com.blog.bean.User cannot be cast to com.blog.bean.User 解决: 开始试着找错误,在test上看能不能打

weixin_45790068的博客 1208

IEC 104电力规约详细解读(一) - 报文结构、报文分类、ASDU

比如,双方可以按频率发送,比如接收8帧I帧回答一帧S帧,也可以要求接收1帧I帧就应答1帧S帧,当然也可以不要求(S帧内容示例参考例1)。所以U帧格式的控制欲第一个字节就只有6种情况,分别是0x83(TESTER确认)、0x43(TESTER命令)、0x23(STOPDT确认)、0x13(STOPDT命令)、0x0B(START确认)、0x07(START命令)ASDU(应用服务数据单元),协议原文格式最好去101协议去看看,会比较详细。遥信、遥测、遥控、遥调、总召、对时等都需要使用I格式传送。

张二狗的博客 1万+

[QMT量化交易小白入门]-二十八、有了回测年化收益好的策略,如何在QMT量化实盘呢(附python代码解析)

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步,自己淋过雨了,希望大家都有一把伞。

木头大左的博客 2923

彻底解决SpringBoot2配置Redis报错java.lang.ClassCastException

使用SpringBoot2 +spring-data-redis做缓存,GenericFastJsonRedisSerializer做序列化和反序列化的情况下,devtools开启本地热部署后,导致异常出现: java.lang.ClassCastException: DTOObject cannot be cast to DTOObject 某个类不能强制转换成某个类,但是者两个类确实是一模一样的,错误主要出现在类加载器上 首先,出现这个问题,因为类的全名和路径都一样,那么根...

maizi_yiyang的专栏 3527

10、智慧变电站 - 加载vue大屏元素(整体效果)

这一篇文章非常简单,但是也非常出效果阅读前面几篇文章,都可以看到有顶部、左侧、右侧的面板,主要我不会录gif图片,大屏元素面板还有一些动态加载的效果。 vue的transition标签 Vue 提供了 transition 的封装组件,可以给任何元素和组件添加进入/离开过渡;在进入/离开的过渡中,会有 6 个 class 切换:v-enter 、v-enter-active 、v-enter-to 、v-leave 、v-leave-active 、v-leave-to。我们正好使用这个特性来达到面板进入

github_39988036的博客 1039

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的博客 5307

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Spring-Data-Redis--解决java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxx

说明 本文介绍解决Spring-Data-Redis的“java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxx”报错的方法。 出现的场景 SpringBoot项目中使用Redis来进行缓存。把数据放到缓存中时没有问题,但从缓存中取出来反序列化为对象时报错:“java.lang.ClassCastException: java.util.LinkedHashMap cannot

IT利刃出鞘的博客 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

springboot集成reids缓存,使用分页时报java.lang.ClassCastException

1.之前已经使用redis作为缓存,对单个对象和List对象做缓存时均没有问题。 redis本身没有出现问题,当然配置也没有问题。序列化和反序列化也没出问题 2.新增了一个分页器,手写的分页对象,对分页查询的数据缓存 一开报错: DefaultSerializer requires a Serializable payload but received an object ...

huofuman960209的博客 2587

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

springboot 从redis取缓存的时候java.lang.ClassCastException:异常

在学习springboot集成redis的时候遇到这样一个奇怪的问题:我从数据库中取得的对象已经放入了redis中,而且从redis的客服端也可以查看到对应的key,开始的时候还是正常的,能正常的从缓存中取得并返回我需要的类;但是过一段时间第二次访问这个方法时(这时应该是到redis里面取)抛出了java.lang.ClassCastException异常,说你的com.test.PerSon类(

小白杨 1万+

springboot从redis取缓存发生java.lang.ClassCastException异常

错误信息 java.lang.ClassCastException: com.wdhcr.entity.User cannot be cast to com.wdhcr.entity.User at com.wdhcr.service.imp.UserServiceImp$$EnhancerBySpringCGLIB$$e1be21d4.findById(<generated>) ...

weixin_45089791的博客 818

springboot读取redis发生java.lang.ClassCastException异常

3 java.lang.ClassCastException: com.winds.admin.core.model.system.User cannot be cast to com.winds.admin.core.model.system.User 4 at com.winds.admin.utils.web.WebValidateUtil.isLo...

人生最遗憾的莫过于:轻易地放弃了不该放弃的,固执地坚持了不该坚持的 1654

springboot集成redis,使用@Cacheable导致java.lang.ClassCastException:异常

如题: 在springboot集成redis,使用@Cacheable的时候, 第一次查询到数据,存到了redis中, 紧接着第二次查询的时候,从缓存里取数据,报错 java.lang.ClassCastException: com.whb.book.entity.Book cannot be cast to com.whb.book.entity.Book 后来

蓝天之枫 1万+

spring boot从redis取缓存发生java.lang.ClassCastException异常

spring boot从redis取缓存发生java.lang.ClassCastException异常

w36680130的博客 367

Springboot 报错java.lang.ClassCastException: A cannot be cast to A

问题 Springboot 报错java.lang.ClassCastException: A cannot be cast to A 最近在自己写一个商城系统,用的是SpringBoot,因为是第一次实践从零开始,很多底层的问题层出不穷,着实让我很头痛。 报这个错是我在获取登录用户信息的时候报错的: MainUser mb=(MainUser) request.getSession().getAttribute(“user”); 报错信息: java.lang.ClassCastException: co

小灰灰的博客 2038

springboot redis类型转换异常

java.lang.ClassCastException: com.crazyang.entity.Goods cannot be cast to com.crazyang.entity.Goods ###该错误的引起是由于开发中引入了DevTools进行热部署。 当对象被序列化到缓存里时,当前应用的类加载器是C1,当你改变了一些代码或者配置文件的时候,DevTools 工具将会自动重新启动这个容...

java_mdzy的博客 1638

项目总结10:通过反射解决springboot环境下从redis取缓存进行转换时出现ClassCastException异常问题...

通过反射解决springboot环境下从redis取缓存进行转换时出现ClassCastException异常问题 关键字   springboot热部署ClassCastException异常 反射 redis 前言   最近项目出现一个很有意思的问题,用户信息(token)储存在redis中;在获取token,反序列化的类型转换的时候,明明是同一个类却总是抛出Cla...

weixin_34049032的博客 245
上一篇: 记一次在线展示excel时出现合并单元格的问题
下一篇: 达梦JAVA程序指定访问模式(模式名含有特殊字符的处理)
淋雨一直走啊
博客等级 码龄11年 39粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值