@Cacheable с условием для аргументов метода - PullRequest
0 голосов
/ 25 августа 2018

Я прочитал из пружины @Cacheable docs (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 голосов
/ 25 августа 2018

Прежде всего, переменная (аргумент) равна #req, поэтому вам нужно !#req....

Во-вторых, вам нужно представить myStr в виде буквенной строки в SpEL.

Собираем все вместе ...

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

(Обратите внимание на одинарные кавычки вокруг значения myStr).

0 голосов
/ 25 августа 2018

Насколько я понимаю, вы не можете использовать сначала #, а затем другой оператор последовательно. Вы должны использовать как - "# ... равно (..) == ложно" Или же, "# ... равно (..)! = true"

Кроме того, лучше всего использовать в соответствии с первым ответом Гари Рассела.

...