我从春季@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;
}
}
但是它失败了,并带有春天的例外,说'!'是无效的。有人可以帮我解决这个问题吗
答案 0 :(得分:2)
首先,变量(参数)为#req
,因此您需要!#req...
。
第二,您需要在SpEL中将myStr
表示为文字字符串。
将它们放在一起...
@Cacheable(condition="!#req.id.equals('" + myStr + "')")
(请注意myStr
值的单引号)。
答案 1 :(得分:0)
根据我的理解,您不能先使用#,然后再依次使用其他运算符。 您必须使用类似- “#...等于(..)==假” 要么, “#... equals(..)!= true”
另外,最好按照Gary Russell的第一个答案的建议使用。