您好,我创建了简单的ErrorDecoder,但未调用它:
配置:
@Bean
UserClient userClient ( @Value( "${url}" ) final String url )
{
return Feign
.builder()
.client( new OkHttpClient() )
.errorDecoder( new FeignErrorDecoder() )
.encoder( new GsonEncoder() )
.decoder( new GsonDecoder() )
.logger( new Slf4jLogger( UserClient.class ) )
.logLevel( Level.FULL )
.target( UserClient.class, url );
}
ErrorDecoder:
@Slf4j
public class FeignErrorDecoder implements ErrorDecoder
{
@Override
public Exception decode ( String methodKey, Response response )
{
if(response.status() != 200) {
log.error( "ERROR" );
}
return errorStatus(methodKey, response);
}
}
然后,堆栈跟踪显示RetryableException的调用,并且我在任何地方都看不到我的日志。我做错什么了吗?
答案 0 :(得分:0)
仅当收到响应且响应代码不是2xx时,才会调用错误解码器。如果由于最大重试次数已用完而导致请求失败,则不会调用错误解码器。在这种情况下,将异常抛出给调用方法。
如果您想在重试期间应用逻辑,除了Retryer
之外,还需要提供自己的ErrorDecoder
答案 1 :(得分:0)
尝试返回非200状态代码。
赞:
@ExceptionHandler(Exception.class)
@ResponseBody
public ResponseEntity<String> defaultException(Exception ex) {
LogBack.error(ex.getMessage(),ex);
return ResponseEntity.status(400).body("");
}