Spring ~ 如何根据 Enum 值进行缓存

问题描述 投票:0回答:1

我有一个 Spring Boot 项目,我想对我正在处理的远程端点返回给我的结果实现缓存。但是,我不仅仅想缓存所有内容,而是仅在某些条件下缓存。

具体来说,我正在处理一个端点,该端点返回一个结果对象,其中包含一个枚举,详细说明请求是否成功。我想缓存该结果,但前提是结果成功。

在正常代码中,我只需使用以下条件进行检查:

if(result.status == MyStatus.OK)

但是,这在

@Cacheable
注释中不起作用。我知道它需要进入“除非”参数,但是当我尝试在其中输入与上述条件等效的内容时,例如......

@Cacheable(value = 'myCacheName',
        key = "#myKey",
        unless = "#result.status() != MyStatus.OK")

...我只收到错误“无法解析类‘MyStatus’”。

这有可能吗?如果是的话,我需要怎么写?

java spring caching spring-el
1个回答
0
投票

简短回答:

@Cacheable(value = 'myCacheName',
        key = "#myKey",
        unless = "#result.status() != T(com.my_service.MyStatus).OK")

为了使 SpEL(Spring 表达式语言)能够找到有问题的类,您需要做两件事:

  1. 将类名括在
    T()
  2. 使用班级的完全限定名称
© www.soinside.com 2019 - 2024. All rights reserved.