【问题标题】:springboot Unboxing of redisTemplate. may produce NullPointerExceptionspringboot redisTemplate的拆箱。可能产生 NullPointerException
【发布时间】:2020-10-03 09:18:01
【问题描述】:

我在项目中使用 springboot(2.3.1) 和 Lettuce

过滤器

@Slf4j
@WebFilter(filterName = "requestWrapperFilter", urlPatterns = {"/*"})
public class RequestWrapperFilter implements Filter {
    @Resource
    private RedisTemplate redisTemplate;
    
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    ...
                if (redisTemplate.hasKey(COMMON_HEAD_TOKEN_NAME + token)) {
                    redisTemplate.delete(COMMON_HEAD_TOKEN_NAME + token);
                }
    }
    ...
}

RedisConfig 配置如下:

@Configuration
@Component
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Serializable> redisTemplate(LettuceConnectionFactory connectionFactory) {
        RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<>();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Object.class));
        redisTemplate.setConnectionFactory(connectionFactory);
        return redisTemplate;
    }
}

但是当我调用 interface 时,应用程序显示以下错误:

有警告:

Unboxing of 'redisTemplate.hasKey(COMMON_HEAD_TOKEN_NAME + token)' may produce 'NullPointerException' 
Unchecked call to 'hasKey(K)' as a member of raw type 'org.springframework.data.redis.core.RedisTemplate' 

我可以忽略吗?

【问题讨论】:

    标签: java spring-boot lettuce


    【解决方案1】:

    第一个警告意味着hasKey 方法返回一个对象包装器,但在if 条件中使用它会隐式拆箱(即将调用的结果转换为原始值)。如果由于某种原因hasKey 方法返回null,你会得到一个错误。为了安全起见,请按如下方式检查密钥是否存在:

    if (Boolean.TRUE.equals(redisTemplate.hasKey(COMMON_HEAD_TOKEN_NAME + token))) {
    

    第二个警告意味着您的 redisTemplate 字段具有原始类型,但是,RedisTemplate 类已参数化。要消除警告,请在过滤器中定义 redisTemplate 字段,如下所示:

    @Resource
    private RedisTemplate<String, Serializable> redisTemplate;
    

    【讨论】:

      猜你喜欢
      • 2019-10-08
      • 2016-02-13
      • 1970-01-01
      • 2020-11-05
      • 2015-02-22
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      相关资源
      最近更新 更多