Spring Cache - 我如何在除非参数中捕获异常?

tri*_*bal 1 java spring ehcache spring-el spring-cache

我得到以下代码:

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

该方法抛出BookException并且我想避免在发生这种情况时缓存结果。但是当我执行该方法时:

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

小智 7

如果在带注释的方法中抛出异常并进一步传播(似乎是您的情况),则不必捕获它。在这种情况下,没有键值对要存储在缓存中,因此默认情况下您可以获得所需的行为:)

简而言之:删除“除非”条件并享受。