Spring Cache - Как я могу поймать исключение в разве что аргумент? - PullRequest
0 голосов
/ 04 мая 2018

Я получаю следующий код:

@Cacheable(value = "cacheName", key = "#someMap.toString()", unless="#result.error")
public List<Book> methodName(Map<Integer, Integer> someMap) throws BookException {
//...

Метод выдает BookException , и я хочу избежать кэширования результата, когда это происходит. Но когда я выполняю метод:

org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'error' cannot be found on object of type 'java.util.ArrayList' - maybe not public?

Ответы [ 3 ]

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

Вам не нужно перехватывать его, если исключение выдается в аннотированном методе и распространяется дальше (похоже, это ваш случай). В этом случае нет пары ключ-значение для хранения в кэше, поэтому вы получите желаемое поведение по умолчанию:)

Короче: уберите условие "если" и наслаждайтесь.

0 голосов
/ 21 сентября 2018

Давайте попробуем с этой конфигурацией, она не будет кэшировать данные при возникновении исключения:

@ Cacheable (value = "sendAndReceiveMessage", key = "{# requestData.toString ()}", если только = "#result instanceof T (java.lang.Exception)")

0 голосов
/ 04 мая 2018

Поскольку результатом является коллекция (в данном случае список), вы можете использовать только операции, связанные с этим классом. Таким образом, вы можете сказать что-то вроде unless="#result != null" или unless="#result.size() > 0"

Ошибка не является допустимым методом в классе List.

...