spring data redis serializer SerializationException 序列化问题

转载文章:通过此文章解决了以下的异常

spring data redis serializer SerializationException 序列化问题

项目中需要使用redis做一些缓存失效,以达到验证码失效的目的。由于K,V使用了<string,stirng>,<string,long>,验证验证码是否存在,是否达到规定次数。参看了官方文档(内容很少),碰到了序列化的问题,异常如下:

 
  1. org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to deserialize payload. Is the byte array a result of corresponding serialization for DefaultDeserializer?; nested exception is java.io.EOFException

  2. at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.deserialize(JdkSerializationRedisSerializer.java:41) ~[spring-data-redis-1.6.0.RELEASE.jar:1.6.0.RELEASE]

  3. at org.springframework.data.redis.core.AbstractOperations.deserializeValue(AbstractOperations.java:296) ~[spring-data-redis-1.6.0.RELEASE.jar:1.6.0.RELEASE]

  4. at org.springframework.data.redis.core.AbstractOperations$ValueDeserializingRedisCallback.doInRedis(AbstractOperations.java:53) ~[spring-data-redis-1.6.0.RELEASE.jar:1.6.0.RELEASE]

  5. at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:191) ~[spring-data-redis-1.6.0.RELEASE.jar:1.6.0.RELEASE]

  6. at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:153) ~[spring-data-redis-1.6.0.RELEASE.jar:1.6.0.RELEASE]

  7. at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:86) ~[spring-data-redis-1.6.0.RELEASE.jar:1.6.0.RELEASE]

  8. at org.springframework.data.redis.core.DefaultValueOperations.get(DefaultValueOperations.java:43) ~[spring-data-redis-1.6.0.RELEASE.jar:1.6.0.RELEASE]

  9. at com.xhqb.user.register.manager.impl.CaptchaMessageManagerImpl.getCaptcha(CaptchaMessageManagerImpl.java:77) ~[classes/:na]

  10. at com.xhqb.user.register.controller.UserRegisterController.getCaptcha(UserRegisterController.java:40) ~[classes/:na]

  11. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_79]

  12. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_79]

  13. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_79]

  14. at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_79]

  15. at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) ~[spring-web-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  16. at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  17. at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:111) ~[spring-webmvc-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  18. at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:806) ~[spring-webmvc-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  19. at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:729) ~[spring-webmvc-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  20. at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  21. at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) ~[spring-webmvc-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  22. at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) ~[spring-webmvc-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  23. at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) [spring-webmvc-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  24. at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) [spring-webmvc-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  25. at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) [javax.servlet-api-3.1.0.jar:3.1.0]

  26. at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) [spring-webmvc-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  27. at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [javax.servlet-api-3.1.0.jar:3.1.0]

  28. at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808) [jetty-servlet-9.2.13.v20150730.jar:9.2.13.v20150730]

  29. at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669) [jetty-servlet-9.2.13.v20150730.jar:9.2.13.v20150730]

  30. at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85) [spring-web-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  31. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  32. at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.13.v20150730.jar:9.2.13.v20150730]

  33. at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:197) [cors-filter-2.4.jar:2.4]

  34. at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:274) [cors-filter-2.4.jar:2.4]

  35. at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.13.v20150730.jar:9.2.13.v20150730]

  36. at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) [jetty-servlet-9.2.13.v20150730.jar:9.2.13.v20150730]

  37. at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]

  38. at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) [jetty-security-9.2.13.v20150730.jar:9.2.13.v20150730]

  39. at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]

  40. at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]

  41. at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) [jetty-servlet-9.2.13.v20150730.jar:9.2.13.v20150730]

  42. at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]

  43. at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]

  44. at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]

  45. at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]

  46. at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]

  47. at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]

  48. at org.eclipse.jetty.server.Server.handle(Server.java:499) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]

  49. at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]

  50. at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]

  51. at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) [jetty-io-9.2.13.v20150730.jar:9.2.13.v20150730]

  52. at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) [jetty-util-9.2.13.v20150730.jar:9.2.13.v20150730]

  53. at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) [jetty-util-9.2.13.v20150730.jar:9.2.13.v20150730]

  54. at java.lang.Thread.run(Thread.java:745) [na:1.7.0_79]

  55. Caused by: org.springframework.core.serializer.support.SerializationFailedException: Failed to deserialize payload. Is the byte array a result of corresponding serialization for DefaultDeserializer?; nested exception is java.io.EOFException

  56. at org.springframework.core.serializer.support.DeserializingConverter.convert(DeserializingConverter.java:78) ~[spring-core-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  57. at org.springframework.core.serializer.support.DeserializingConverter.convert(DeserializingConverter.java:36) ~[spring-core-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  58. at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.deserialize(JdkSerializationRedisSerializer.java:39) ~[spring-data-redis-1.6.0.RELEASE.jar:1.6.0.RELEASE]

  59. ... 52 common frames omitted

  60. Caused by: java.io.EOFException: null

  61. at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2325) ~[na:1.7.0_79]

  62. at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2794) ~[na:1.7.0_79]

  63. at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801) ~[na:1.7.0_79]

  64. at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299) ~[na:1.7.0_79]

  65. at org.springframework.core.ConfigurableObjectInputStream.<init>(ConfigurableObjectInputStream.java:64) ~[spring-core-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  66. at org.springframework.core.ConfigurableObjectInputStream.<init>(ConfigurableObjectInputStream.java:50) ~[spring-core-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  67. at org.springframework.core.serializer.DefaultDeserializer.deserialize(DefaultDeserializer.java:66) ~[spring-core-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  68. at org.springframework.core.serializer.support.DeserializingConverter.convert(DeserializingConverter.java:73) ~[spring-core-4.2.1.RELEASE.jar:4.2.1.RELEASE]

  69. ... 54 common frames omitted


试了各种网上的方法,还是不能解决。所以,我们解决框架的问题,最好还是理解透框架的思想。

现把正确配置文件贴一下:

 
  1. <bean id="jedisConnFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"

  2. p:use-pool="true"

  3. p:hostName="${redis.hostName}"

  4. p:port="${redis.port}" />

  5.  
  6. <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"

  7. p:connection-factory-ref="jedisConnFactory"

  8. p:keySerializer-ref="stringRedisSerializer"

  9. p:valueSerializer-ref="stringRedisSerializer"/>

  10.  
  11. <bean id="longRedisTemplate" class="org.springframework.data.redis.core.RedisTemplate"

  12. p:connection-factory-ref="jedisConnFactory"

  13. p:keySerializer-ref="stringRedisSerializer"

  14. p:valueSerializer-ref="GenericToStringSerializer"/>

  15.  
  16.  
  17. <bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer" />

  18. <bean id ="JdkSerializationRedisSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>

  19.  
  20. <bean id="GenericToStringSerializer" class="org.springframework.data.redis.serializer.GenericToStringSerializer"

  21. c:type="java.lang.Long"/>

  22. </beans>


配置redisTemplate,是为了使用<k,v>都是string类型的redis操作,配置longRedisTemplate为了使用<k,v>是string,long类型。

使用方式:

 
  1. @Resource(name = "redisTemplate")

  2. private ValueOperations<String, String> valueOperations;

  3.  
  4. @Resource(name = "longRedisTemplate")

  5. private RedisTemplate<String, Long> longRedisTemplate;

  6.  
  7. @Resource(name = "longRedisTemplate")

  8. private ValueOperations<String, Long> intervalOperations;

猜你喜欢

转载自blog.csdn.net/qq_35568099/article/details/81271263