@Cacheable带有方法参数的条件

时间:2018-08-25 10:24:40

标签: spring spring-data spring-el

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

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

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

这是我的Request POJO:

public class Request{
 private String id;

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

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

}

但是它失败了,并带有春天的例外,说'!'是无效的。有人可以帮我解决这个问题吗

2 个答案:

答案 0 :(得分:2)

首先,变量(参数)为#req,因此您需要!#req...

第二,您需要在SpEL中将myStr表示为文字字符串。

将它们放在一起...

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

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

答案 1 :(得分:0)

根据我的理解,您不能先使用#,然后再依次使用其他运算符。 您必须使用类似- “#...等于(..)==假” 要么, “#... equals(..)!= true”

另外,最好按照Gary Russell的第一个答案的建议使用。