报错部分涉及技术栈
Spring Boot、Sa-Token、Redis...
问题场景
问题场景: 在拦截器中操作 Redis 时,遇到空指针异常。
症状
报错信息如下:
java.lang.NullPointerException: Cannot invoke "com.zwt.common.core.utils.RedisUtil.del(String[])" because "this.redisUtil" is null
先说结论
new 的拦截器绕过了 Spring 注入的环节,导致 redisUtil 为空。
(让我看还有谁复制代码不报错就不看的
[○・`Д´・ ○]!!!!)
解决方案
在 GlobalCorsConfig 中通过 Spring 容器管理 CustomInterceptor
,而不是手动 new。
代码部分
@Override public void addInterceptors(InterceptorRegistry registry) { // 通过 Spring 容器获取 CustomInterceptor 实例 registry.addInterceptor(customInterceptor()).addPathPatterns("/**") .excludePathPatterns("/account/**"); // 注册 Sa-Token 的路由拦截器 registry.addInterceptor(saInterceptor()).addPathPatterns("/**") .excludePathPatterns("/account/**"); }
排错思路
1.通过在启动类上加 @PostConstruct
注解,确保不是依赖注入的问题。
@PostConstruct
public void checkRedisUtil() {
System.out.println("主类RedisUtil 是否被注入: " + (redisUtil != null));
redisUtil.set("test", "hello world");
}
2.加注解调试,确认是否是依赖没引进或扫包问题。
最终成功解决~!
希望可以帮助到你^_^