You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中Redis缓存硬编码Key实现?GET接口缓存报错求助

解决Redis缓存无参数GET接口时的null key错误

这个错误的核心原因很明确:你在@Cacheable里用了key="#AssetCache",但Spring的SpEL表达式会把#开头的内容当作**变量(比如方法参数、Bean属性)**去解析,而你的getAssetsResponse()方法没有名为AssetCache的参数,也没有对应的上下文变量,所以Spring解析不出key的值,返回null就触发了这个报错。

反观你的POST接口,#customerId是方法的入参,Spring能直接从方法参数里拿到对应的值,所以缓存能正常工作。

快速修复方案

把硬编码的key用单引号包裹,告诉SpEL这是一个字符串常量,而不是变量:

@Cacheable(value="redis-cache", key = "'AssetCache'")
public Map<String, AssetDetailBO> getAssetsResponse() throws COAssetServiceExceptions {
    try {
        log.info("---- CO_STAGE=[ Caching Service ] ---- ");
        return mergingBrokerageAndMutulFund(assetServiceImpl.getAssetResponse());
    } catch (ServiceExceptions e) {
        log.info("---- CO_STAGE=[ Exception while Calling Assets Adapter For COT ] ---- " + e.getErrorMessage());
        throw e;
    }
}

补充说明

  • 单引号是SpEL里定义字符串常量的标准写法,这样Spring就不会尝试去解析AssetCache为变量,而是直接把它当作缓存的key使用。
  • 如果后续你的GET方法需要添加参数,记得调整key表达式(比如key="#paramName"),避免缓存冲突。
  • 如果有多个无参数的需要缓存的方法,一定要给每个方法设置唯一的固定key,不然不同方法的缓存会互相覆盖。

内容的提问来源于stack exchange,提问作者Loren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 09:37:29