Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringCache-如何捕获参数中的异常?_Java_Spring_Ehcache_Spring El_Spring Cache - Fatal编程技术网

Java SpringCache-如何捕获参数中的异常?

Java SpringCache-如何捕获参数中的异常?,java,spring,ehcache,spring-el,spring-cache,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 { //... 由于结果是一个集合(在本例中是一个列表),因此只能使用附加到该类的操作。因此,您可以说类似于exceller

我得到以下代码:

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

由于结果是一个集合(在本例中是一个列表),因此只能使用附加到该类的操作。因此,您可以说类似于
exceller=“#result!=null”
exceller=“#result.size()>0”


错误不是
列表
类中的有效方法。

由于结果是一个集合(在本例中是一个列表),因此只能使用附加到该类的操作。因此,您可以说类似于
exceller=“#result!=null”
exceller=“#result.size()>0”


error不是
列表
类中的有效方法。

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


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

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


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

让我们尝试此配置,当发生异常时,它不会缓存数据:

@可缓存(value=“sendAndReceiveMessage”,key=“{#requestData.toString()}”,除非=“#result instanceof T(java.lang.Exception)”)


让我们尝试使用此配置,当发生异常时,它不会缓存数据:

@可缓存(value=“sendAndReceiveMessage”,key=“{#requestData.toString()}”,除非=“#result instanceof T(java.lang.Exception)”)


不要抛出异常。而是使用try/catch块,并在catch块中为列表指定null值。也可以使用
@Cacheable(value=“cacheName”,key=“#someMap.toString()”,除非=“#result==null”)
。此技巧适用于包括集合在内的所有对象。

不要抛出异常。而是使用try/catch块,并在catch块中为列表指定null值。也可以使用
@Cacheable(value=“cacheName”,key=“#someMap.toString()”,除非=“#result==null”)
。此技巧适用于包括集合在内的所有对象。

好的,请支持我删除除非。如果出现异常,@Cacheble不会将错误保存到缓存中?(顺便说一句,谢谢)。@tristobal它将为cacheName存储一个
null
,您不希望这样,但它应该在其他时间尝试。否则,对于同一请求,您将一直获得
null
,直到不再存储缓存值(保留超时)。因此,如果您知道您的方法可能会返回
null
或抛出异常,请使用
除非
。因此,除非=“#result==null”,否则在出现异常时,应该这样做?@BabajideM.Moibi您使用的
除非
错误。它应该是
#result==null ||#result.size()==0
。除非结果为空,否则您需要缓存,在这种情况下,您不需要。好的,支持我删除除非。如果出现异常,@Cacheble不会将错误保存到缓存中?(顺便说一句,谢谢)。@tristobal它将为cacheName存储一个
null
,您不希望这样,但它应该在其他时间尝试。否则,对于同一请求,您将一直获得
null
,直到不再存储缓存值(保留超时)。因此,如果您知道您的方法可能会返回
null
或抛出异常,请使用
除非
。因此,除非=“#result==null”,否则在出现异常时,应该这样做?@BabajideM.Moibi您使用的
除非
错误。它应该是
#result==null ||#result.size()==0
。除非结果为空,否则您需要缓存,在这种情况下,您不需要。我使用@Cacheable进行了测试,如果发生异常,它将返回异常类,因此我们不能在此处检查null或not null。除非在方法完成时执行block。它将拥有该调用的全部信息:输入的内容,结果是什么。对于条件,在方法运行之前,它只包含输入和执行的信息。所以它没有关于结果的信息。我使用@Cacheable进行了测试,如果发生异常,它将返回异常类,因此我们不能在这里检查null或notnull。除非在方法完成时执行block。它将拥有该调用的全部信息:输入的内容,结果是什么。对于条件,在方法运行之前,它只包含输入和执行的信息。因此,它将没有关于结果的信息。
org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'error' cannot be found on object of type 'java.util.ArrayList' - maybe not public?