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?