当前位置: 首页 > 知识库问答 >
问题:

@Cacheable与方法参数的条件

於功
2023-03-14

我从Spring@Cacheable文档(https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/cache/annotation/Cacheable.html#condition--)中读到,条件可以使用SpEL指定方法参数的条件。

我一直在尝试同样的方法,但失败了。以下是我的方法:

public static final String myStr = "4";
@Cacheable(condition="#!req.id.equals("+myStr+")")
public Response myCall(Request req){}

这是我的请求POJO:

public class Request{
 private String id;

 public String getId(){
  return this.id; 
 }

 public void setId(String id){
  this.id = id;
 }

}

但是它在SpringSpEL例外情况下失败了,说“!”是无效的。有人能帮我把情况弄好吗?

共有2个答案

隗星驰
2023-03-14

根据我的理解,您不能先使用#然后依次使用其他运算符。您必须使用like-“#…equals(…)=”假“或”#…等于(…)!=真的”

此外,最好按照加里·拉塞尔的第一个答案建议使用。

白刚洁
2023-03-14

首先,变量(参数)是#req,所以需要!#req...

其次,您需要在SpEL中将myStr表示为文本字符串。

把这一切放在一起。。。

@Cacheable(condition="!#req.id.equals('" + myStr + "')")

(请注意myStr值周围的单引号)。

 类似资料:
  • 问题内容: 从spring文档中: 如何指定使用和作为密钥? 问题答案: 如果没有另外指定,当前的Spring缓存实现将所有方法参数用作缓存键。如果要使用选定的键,请参考 Arjan的答案,该答案使用SpEL列表,这是创建唯一键的最简单方法。 从Spring文档 随着Spring 4.0的发布,默认的密钥生成策略发生了变化。Spring的早期版本使用密钥生成策略,该策略对于多个密钥参数仅考虑参数的

  • 是否可以在同一方法上使用和?

  • 问题内容: 有没有更Python的方式来做到这一点? 问题答案: 您可以将它们添加到类似kwarg的列表中: if authenticate: connect_kwargs[‘password’] = “bar” connect_kwargs[‘otherarg’] = “zed” connect(**connect_kwargs) 当您可以将一组复杂的选项传递给函数时,这有时会很有帮助。在这种简

  • 我不熟悉我们在Spring框架中用于缓存的@Cacheable和@CacheEvict注释。但是,在研究@Cacheable使用的实现和参数时,@Cacheable注释的value和cacheName参数之间有什么区别?

  • 问题内容: Varargs: 与 单数组参数: Java 1.6似乎接受/拒绝以下内容: 假设以上内容是正确的,为什么不总是使用varargs而不是单个数组参数呢?似乎免费增加了呼叫者的灵活性。 如果有,专家可以共享内部JVM的不同吗? 谢谢。 问题答案: 数组从Java的开始就出现了,而varargs是最近才添加的。因此,许多旧代码仍然很高兴地使用数组。 还要注意,使用显式数组参数调用通用var

  • 当我从not bean类中的方法调用Cacheable方法时,我突然发现@Cacheable不起作用。 请在下面找到我的代码,并帮助我什么是问题或我错过的东西。