Java:获取redis数据报错:SerializationException: Could not read JSON: Could not resolve type id ‘xxx.xxx‘ ..
·
场景
使用redis工具类获取redis数据时出现异常
异常信息
org.springframework.data.redis.serializer.SerializationException: Could not read JSON: Could not resolve type id 'com.xxx.entity.corpwx.redis.AppToken' as a subtype of `java.lang.Object`: no such class found
at [Source: (byte[])"{"@class":"com.xxx.entity.corpwx.redis.AppToken","accesstoken":"a-w8brAPf3A_yXYTAvug3zPFCTPqGDKVNAgxsndgZSDHQDVy0MHa_7IG9vsL9CG2jm0zwdBGriN6VRCbaeRmDq0M51xs_bTjODH6ShFbHX4g8eJjucKRr3KCYPyct_YdjTa0kozxcf9fKMmqih_WOCxQRTHclWYOg3gLjp2iSIzw6NYNp3EcWiPCBtLMZO_cX75FmeLaS18WYA2l7oLqAg","agentid":""}"; line: 1, column: 11]; nested exception is com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve type id 'com.xxx.entity.corpwx.redis.AppToken' as a subtype of `java.lang.Object`: no such class found
at [Source: (byte[])"{"@class":"com.xxx.entity.corpwx.redis.AppToken","accesstoken":"a-w8brAPf3A_yXYTAvug3zPFCTPqGDKVNAgxsndgZSDHQDVy0MHa_7IG9vsL9CG2jm0zwdBGriN6VRCbaeRmDq0M51xs_bTjODH6ShFbHX4g8eJjucKRr3KCYPyct_YdjTa0kozxcf9fKMmqih_WOCxQRTHclWYOg3gLjp2iSIzw6NYNp3EcWiPCBtLMZO_cX75FmeLaS18WYA2l7oLqAg","agentid":""}"; line: 1, column: 11]
at org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer.deserialize(GenericJackson2JsonRedisSerializer.java:165)
at org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer.deserialize(GenericJackson2JsonRedisSerializer.java:143)
at org.springframework.data.redis.core.AbstractOperations.deserializeValue(AbstractOperations.java:360)
at org.springframework.data.redis.core.AbstractOperations$ValueDeserializingRedisCallback.doInRedis(AbstractOperations.java:62)
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:224)
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:191)
at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97)
at org.springframework.data.redis.core.DefaultValueOperations.get(DefaultValueOperations.java:54)
at com.xxx.util.RedisUtil.get(RedisUtil.java:222)
at com.xxx.corpwx.util.WechatCpUtil.getCorpWxAppTokenKey(WechatCpUtil.java:2089)
at com.xxx.corpwx.util.WechatCpUtil.downloadAndSaveUserInfo(WechatCpUtil.java:1892)
at com.xxx.util.RocketMQMessageUtil.processWechatCpArchiveMessage(RocketMQMessageUtil.java:370)
at com.xxx.util.RocketMQMessageUtil.put2RocketWorkQueue(RocketMQMessageUtil.java:96)
at com.xxx.corpwx.util.WechatCpUtil.handleSessionArchiveMsg(WechatCpUtil.java:1758)
at com.xxx.corpwx.controller.CorpSessionArchiveController.corpWxSessionArchivePush(CorpSessionArchiveController.java:81)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:126)
at org.springframework.boot.web.servlet.support.ErrorPageFilter.access$000(ErrorPageFilter.java:64)
at org.springframework.boot.web.servlet.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:101)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:698)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:367)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:639)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:882)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1647)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:750)
Caused by: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve type id 'com.xxx.entity.corpwx.redis.AppToken' as a subtype of `java.lang.Object`: no such class found
at [Source: (byte[])"{"@class":"com.xxx.entity.corpwx.redis.AppToken","accesstoken":"a-w8brAPf3A_yXYTAvug3zPFCTPqGDKVNAgxsndgZSDHQDVy0MHa_7IG9vsL9CG2jm0zwdBGriN6VRCbaeRmDq0M51xs_bTjODH6ShFbHX4g8eJjucKRr3KCYPyct_YdjTa0kozxcf9fKMmqih_WOCxQRTHclWYOg3gLjp2iSIzw6NYNp3EcWiPCBtLMZO_cX75FmeLaS18WYA2l7oLqAg","agentid":""}"; line: 1, column: 11]
at com.fasterxml.jackson.databind.exc.InvalidTypeIdException.from(InvalidTypeIdException.java:43)
at com.fasterxml.jackson.databind.DeserializationContext.invalidTypeIdException(DeserializationContext.java:2073)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownTypeId(DeserializationContext.java:1564)
at com.fasterxml.jackson.databind.jsontype.impl.ClassNameIdResolver._typeFromId(ClassNameIdResolver.java:76)
at com.fasterxml.jackson.databind.jsontype.impl.ClassNameIdResolver.typeFromId(ClassNameIdResolver.java:66)
at com.fasterxml.jackson.databind.jsontype.impl.TypeDeserializerBase._findDeserializer(TypeDeserializerBase.java:159)
at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer._deserializeTypedForId(AsPropertyTypeDeserializer.java:125)
at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromObject(AsPropertyTypeDeserializer.java:110)
at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromAny(AsPropertyTypeDeserializer.java:213)
at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.deserializeWithType(UntypedObjectDeserializer.java:781)
at com.fasterxml.jackson.databind.deser.impl.TypeWrappedDeserializer.deserialize(TypeWrappedDeserializer.java:74)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4674)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3690)
at org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer.deserialize(GenericJackson2JsonRedisSerializer.java:163)
... 67 common frames omitted
排查
1、从报错信息上看是redis获取数据时,在Java类型转换出现的异常
“com.xxx.entity.corpwx.redis.AppToken"无法转为"java.lang.Object”
说明该redis数据在保存的时候就是保存的"com.xxx.entity.corpwx.redis.AppToken"对象,那么取出来也要用这个对象才行,而且包名要与redis数据类型的包名一致
原因
没有按redis保存的数据类型来接收返回结果
解决
获取redis数据时,按redis的数据类型来接收返回结果(对象的包名要与redis数据的包名完全一致)
// 强转为对应的数据类型
AppToken appToken = (AppToken) redisUtil.get(appTokenKey);
更多推荐
所有评论(0)