我有一个 Spring Boot 项目,我想对我正在处理的远程端点返回给我的结果实现缓存。但是,我不仅仅想缓存所有内容,而是仅在某些条件下缓存。
具体来说,我正在处理一个端点,该端点返回一个结果对象,其中包含一个枚举,详细说明请求是否成功。我想缓存该结果,但前提是结果成功。
在正常代码中,我只需使用以下条件进行检查:
if(result.status == MyStatus.OK)
但是,这在
@Cacheable
注释中不起作用。我知道它需要进入“除非”参数,但是当我尝试在其中输入与上述条件等效的内容时,例如......
@Cacheable(value = 'myCacheName',
key = "#myKey",
unless = "#result.status() != MyStatus.OK")
...我只收到错误“无法解析类‘MyStatus’”。
这有可能吗?如果是的话,我需要怎么写?
简短回答:
@Cacheable(value = 'myCacheName',
key = "#myKey",
unless = "#result.status() != T(com.my_service.MyStatus).OK")
为了使 SpEL(Spring 表达式语言)能够找到有问题的类,您需要做两件事:
T()