Spring Framework从6.0.14升级到6.1.6后SpEL表达式报错如何解决?
Spring 6.1.6升级后@Cacheable SpEL表达式空指针问题解决方法
问题本质:Spring Framework 6.1版本对SpEL表达式的空值校验逻辑做了强化,当链式调用中某个对象为null时,直接调用后续方法会触发
SpelEvaluationException;而6.0.14版本未做如此严格的校验,允许隐式跳过null对象的方法调用。核心解决方法:在SpEL的链式方法调用中使用安全导航操作符
?.,它会自动判断前置对象是否为null,若为null则终止后续调用并返回null,避免抛出异常。修改后的注解代码如下:
@Cacheable(value = "Cache", key = "(#request)?.getToken()?.hashCode()", unless = "#result == null")
- 进阶严谨处理:如果需要在
#request为null时指定默认缓存key,可以使用三目运算符做显式判断:
@Cacheable(value = "Cache", key = "#request != null ? #request.getToken().hashCode() : 'default-cache-key'", unless = "#result == null")
内容的提问来源于stack exchange,提问作者Pankaj Verma
相关产品推荐
相关产品推荐

