springboot中redis取缓存类型转换异常
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 异常如下: [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: library.book.demo.entity.Admin cannot be cast to library.book.demo.entity.Admin] with root cause java.lang.ClassCastException: library.book.demo.entity.Admin cannot be cast to library.book.demo.entity.Admin at library.book.demo.controller.AdminController$$EnhancerBySpringCGLIB$$ff9916fe.selectOne(<generated>) ~[classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na: 1.8 .0_181] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 62 ) ~[na: 1.8 .0_181] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 43 ) ~[na: 1.8 .0_181] at java.lang.reflect.Method.invoke(Method.java: 498 ) ~[na: 1.8 .0_181] 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 ] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 166 ) ~[tomcat-embed-core- 9.0 . 37 .jar: 9.0 . 37 ] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java: 53 ) ~[tomcat-embed-websocket- 9.0 . 37 .jar: 9.0 . 37 ] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 193 ) ~[tomcat-embed-core- 9.0 . 37 .jar: 9.0 . 37 ] at org.apache.catalina.co |
同一种类型却出现转换异常:s java.lang.ClassCastException: library.book.demo.entity.Admin cannot be cast to library.book.demo.entity.Admin] with root cause java.lang.ClassCastException: library.book.demo.entity.Admin cannot be cast to library.book.demo.entity.Admin
springboot类的加载器::》》》》SpringBoot中使用的自动重启技术涉及两个类加载器,一个是baseclassloader,用来加载不会变化的类,例如项目引用的第三方的jar;另一个是restartclassloader,用来加载开发者自己写的会变化的类。
redis存取对象使用了两个不同的加载器,导致同一个类在redis存取出现不一致情况,所以出现类型转换异常。
所以把<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-devtools</artifactId>-->
<!-- <scope>runtime</scope>-->
<!-- <optional>true</optional>-->
<!-- </dependency>-->
注销从重新编译重启就可以了
本文来自博客园,作者:余生请多指教ANT,转载请注明原文链接:https://www.cnblogs.com/wangbiaohistory/p/13747342.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了