Feign ErrorDecoder не вызывается
Здравствуйте, я создал простой 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 ответов
Декодеры ошибок вызываются только тогда, когда получен ответ, а код ответа не равен 2xx. Декодеры ошибок не вызываются в случае сбоя запроса, поскольку максимальное количество повторных попыток исчерпано. В этом случае Исключение выбрасывается в вызывающий метод.
Если вы хотите применить логику во время повторной попытки, вам нужно будет предоставить свой собственный Retryer
в дополнение к вашему ErrorDecoder
Попытка вернуть код состояния, отличный от 200.
Нравится:
@ExceptionHandler(Exception.class)
@ResponseBody
public ResponseEntity<String> defaultException(Exception ex) {
LogBack.error(ex.getMessage(),ex);
return ResponseEntity.status(400).body("");
}