spring session Session().removeAttribute 异常

Caused by: org.springframework.data.redis.RedisSystemException: Unknown redis exception; nested exception is java.lang.NullPointerException
    at org.springframework.data.redis.FallbackExceptionTranslationStrategy.getFallback(FallbackExceptionTranslationStrategy.java:48)
    at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38)
    at org.springframework.data.redis.connection.jedis.JedisConnection.convertJedisAccessException(JedisConnection.java:195)
    at org.springframework.data.redis.connection.jedis.JedisConnection.hMSet(JedisConnection.java:2631)
    at org.springframework.data.redis.core.DefaultHashOperations$7.doInRedis(DefaultHashOperations.java:134)
    at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:190)
    at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:152)
    at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:85)
    at org.springframework.data.redis.core.DefaultHashOperations.putAll(DefaultHashOperations.java:131)
    at org.springframework.data.redis.core.DefaultBoundHashOperations.putAll(DefaultBoundHashOperations.java:85)
    at org.springframework.session.data.redis.RedisOperationsSessionRepository$RedisSession.saveDelta(RedisOperationsSessionRepository.java:778)
    at org.springframework.session.data.redis.RedisOperationsSessionRepository$RedisSession.access$000(RedisOperationsSessionRepository.java:670)
    at org.springframework.session.data.redis.RedisOperationsSessionRepository.save(RedisOperationsSessionRepository.java:388)
    at org.springframework.session.data.redis.RedisOperationsSessionRepository.save(RedisOperationsSessionRepository.java:245)
    at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.commitSession(SessionRepositoryFilter.java:245)
    at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.access$100(SessionRepositoryFilter.java:217)
    at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryResponseWrapper.onResponseCommitted(SessionRepositoryFilter.java:205)
    at org.springframework.session.web.http.OnCommittedResponseWrapper.doOnResponseCommitted(OnCommittedResponseWrapper.java:226)
    at org.springframework.session.web.http.OnCommittedResponseWrapper.checkContentLength(OnCommittedResponseWrapper.java:216)
    at org.springframework.session.web.http.OnCommittedResponseWrapper.access$200(OnCommittedResponseWrapper.java:37)
    at org.springframework.session.web.http.OnCommittedResponseWrapper$SaveContextPrintWriter.write(OnCommittedResponseWrapper.java:278)
    at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:285)
    at java.io.PrintWriter.write(PrintWriter.java:426)
    at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:119)
    at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:336)
    at java.io.Writer.write(Writer.java:157)
    at org.apache.jsp.pages.include.include_jsp._jspService(include_jsp.java:293)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
    ... 69 more
Caused by: java.lang.NullPointerException
    at redis.clients.jedis.Protocol.sendCommand(Protocol.java:89)
    at redis.clients.jedis.Protocol.sendCommand(Protocol.java:74)
    at redis.clients.jedis.Connection.sendCommand(Connection.java:78)
    at redis.clients.jedis.BinaryClient.hmset(BinaryClient.java:242)
    at redis.clients.jedis.BinaryJedis.hmset(BinaryJedis.java:825)
    at org.springframework.data.redis.connection.jedis.JedisConnection.hMSet(JedisConnection.java:2629)

 

hMSet  的 value不能为null.

Session().removeAttribute  将对应的value设置为了null,所以报异常了

 

 

解决方案

 

public class KryoRedisSerializer<T> implements RedisSerializer<T> {  
  
    @Override  
    public byte[] serialize(Object obj) throws SerializationException {  
        if (null == obj) {
            return EMPTY_ARRAY;
        }
         return KryoUtil.writeToByteArray(obj);
  
    }  
    
    static final byte[] EMPTY_ARRAY = new byte[0];

    static boolean isEmpty(byte[] data) {
        return (data == null || data.length == 0);
    }
  
  
    @Override  
    public T deserialize(byte[] bytes) throws SerializationException {  
         if (isEmpty(bytes)) {
              return null;
          }
        return KryoUtil.readFromByteArray(bytes);
    }  
    
    
    public static void main(String[] args) {
         byte[] bytes = KryoUtil.writeToByteArray("");
         Object o = KryoUtil.readFromByteArray(bytes);
        
         System.out.println("============="+o); 
         
         
    }

 

 

转载于:https://my.oschina.net/xiaominmin/blog/1609597

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值