Spring @方法参数的可缓存条件

Spring @方法参数的可缓存条件,spring,spring-data,spring-el,Spring,Spring Data,Spring El,我从spring@Cacheable文档中读取() condition可以使用SpEL指定方法参数的条件 我一直在尝试同样的方法,但失败了。以下是我的方法: public static final String myStr = "4"; @Cacheable(condition="#!req.id.equals("+myStr+")") public Response myCall(Request req){} 这是我的请求POJO: public class Request{ privat

我从spring
@Cacheable
文档中读取()
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;
 }

}

但是它失败了,除了spring SpEL例外,它说的是“!”这是无效的。有人能帮我把条件弄对吗?

据我所知,你不能先使用#然后再依次使用其他运算符。 你必须使用like- “#…等于(..)=假” 或 “#…等于(…)!=真”


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

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


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

首先,变量(参数)是
\req
,因此您需要
#请求…

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

把这一切放在一起

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

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

首先,变量(参数)是
#req
,因此您需要
#请求…

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

把这一切放在一起

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

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

是的,你是对的。我的意思是说,以后!操作人员谢谢你,你是对的。我的意思是说,以后!操作人员谢谢