springboot canche 无法避免Null key错误, Null key returned for cache operation

bash 复制代码
2025-12-25 14:32:08.245 [http-nio-8080-exec-2] ERROR c.c.f.a.common.exception.ArchExceptionHandler - Null key returned for cache operation (maybe you are using named params on classes without debug info?) Builder[public java.lang.String com.software.framework.arch.appliation.AbstarctSystemApplication.getAllCompanyById(java.lang.String)] caches=[arch-base_getAllCompanyById_] | key='#p0' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='#p0!=null||#p0!=''' | unless='#result=='未查询到组织信息'||#result == null ' | sync='false'
java.lang.IllegalArgumentException: Null key returned for cache operation (maybe you are using named params on classes without debug info?) Builder[public java.lang.String com.software.framework.arch.appliation.AbstarctSystemApplication.getAllCompanyById(java.lang.String)] caches=[arch-base_getAllCompanyById_] | key='#p0' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='#p0!=null||#p0!=''' | unless='#result=='未查询到组织信息'||#result == null ' | sync='false'
	at org.springframework.cache.interceptor.CacheAspectSupport.generateKey(CacheAspectSupport.java:578)
	at org.springframework.cache.interceptor.CacheAspectSupport.findCachedItem(CacheAspectSupport.java:518)
	at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:401)
	at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:345)
	at org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:61)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)

springboot canche 无法避免Null key

md,真的还有人在2025年还用springboot 2.3.0吗??

springboot 2.3.0 版本的陈旧bug

在 Spring Framework < 5.3.0(即 Spring Boot < 2.4.0)中:

condition 表达式是在 key 生成之后才被评估的!

这与官方文档描述和开发者预期 完全相反!

也就是说,即使你写了:

java 复制代码
@Cacheable(key = "#p0", condition = "#p0 != null")

Spring 2.3.0 的执行顺序仍然是:

先解析 key = "#p0" → 如果 p0 == null,得到 null

立即抛出 Null key returned 异常

❌ 根本不会去检查 condition!

📌 这是一个 设计/实现 bug,在后续版本中被修复。

相关推荐
IvanCodes42 分钟前
Python 数据处理(十三):JSON、CSV 与数据序列化
开发语言·python
步行cgn2 小时前
Spring c 命名空间注入详解
java·后端·spring
明月_清风2 小时前
Maven 到底是什么?一篇文章搞懂 Java 项目构建与依赖管理
java·后端·maven
aramae2 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
Rain的Java大神之路3 小时前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
Wang's Blog3 小时前
Java 接入Redis: 通用命令与键管理
java·服务器·redis
Wang's Blog3 小时前
Java 接入Redis: 列表集合与有序集合操作命令
java·服务器·redis
Ivanqhz4 小时前
SVD++算法
java·服务器·网络·深度学习·神经网络
qq_2518364575 小时前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
caoerzhong5 小时前
JeeWMS 开源仓库管理系统全景解读:一套 Java WMS 如何把 WMS/OMS/BMS/TMS 装进同一个系统
java·开源