redis缓存报错---org.springframework.expression.spel.SpelEvaluationException: EL1008E:

一、问题场景

我这里是调用查询方法,先去redis缓存中查询是否存在某个数据,存在就从缓存读取,不存在再去查数据库
调用方法报错:

org.springframework.expression.spel.SpelEvaluationException: EL1008E: 
Property or field 'categoryId' cannot be found on object of type 'org.springframework.cache.interceptor.CacheExpressionRootObject' 
- maybe not public or not valid?

在这里插入图片描述

二、问题分析

根据报错表现为 Spring表达式语言(SpEL)的问题。
错误消息EL1008E表明SpEL表达式试图在类型为org.springframework.cache.interceptor.CacheExpressionRootObject的对象上访问一个名为categoryId的属性或字段,但找不到它。

可能出现此错误的几个原因:

  1. 拼写错误或属性名不正确:仔细检查属性名categoryId是否正确,并与你尝试访问的对象中的实际属性名匹配。
  2. 可见性:确保CacheExpressionRootObject类中的categoryId属性可访问(即,是公共的)。如果不是公共的或者不存在,SpEL将无法访问它。
  3. 对象类型:确保SpEL评估的对象确实是CacheExpressionRootObject的实例,并且具有categoryId属性。

三、解决方案

具体解决方案需要按照具体的错误提示,我这里提示找不到categoryId属性
问题所在:配置缓存key格式有问题,少加一个字符#

在这里插入图片描述
有关key值的详细定义规则,参见->

四、缓存key定义规则

#user.id : #user指的是方法形参的名称, id指的是user的id属性 , 也就是使用user的id属性作为key ;

#result.id : #result代表方法返回值,该表达式 代表以返回对象的id属性作为key ;

#p0.id:#p0指的是方法中的第一个参数,id指的是第一个参数的id属性,也就是使用第一个参数的id属性作为key ;

#a0.id:#a0指的是方法中的第一个参数,id指的是第一个参数的id属性,也就是使用第一个参数的id属性作为key ;

#root.args[0].id:#root.args[0]指的是方法中的第一个参数,id指的是第一个参数的id属性,也就是使用第一个参数

的id属性作为key ;

四、结束

分享:
小扇引微凉,悠悠夏日长。
有任何疑问,欢迎私信指教!!!

  • 24
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

karry0130

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值