根据文档,我可以在exceptionExpression
中使用类似下面的代码:@Retryable(exceptionExpression="message.contains('this can be retried')")
但是我想得到响应正文并检查其中的消息(来自RestClientResponseException
),类似于以下内容:exceptionExpression = "getResponseBodyAsString().contains('important message')"
我试过了,但是没有用。那么,有没有可能做一些类似的事情,从responseBody检查信息呢?
编辑:按照加里Russell的建议添加整个@Retryable
注解参数:@Retryable(value = HttpClientErrorException.class, exceptionExpression = "#{#root instanceof T(org.springframework.web.client.HttpClientErrorException) AND responseBodyAsString.contains('important message')}")
我正在使用实际的RestClientResponseException
子类,我正在捕获它,但仍然没有触发重试。
2条答案
按热度按时间sy5wg1nm1#
在当前版本中,表达式错误地要求静态模板标记;在1.3中将不需要它们。
但是,如果存在
include
或exclude
属性,则不能使用此表达式,因此表达式应检查类型:编辑
一个二个一个一个
hjzp0vay2#
我已经实现了以下方法,在我看来这要方便得多。
这里RetryCheckerService封装了所有需要的逻辑。