Насколько я понимаю, метод decode () симулируемого ErrorDecoder будет вызываться, когда запрос отвечает кодом состояния! = 2xx. Отлаживая свои тесты, я обнаружил, что метод decode () моего CustomErrorDecoder не вызывается, например, на 504 или 404. Я попробовал два способа настроить его:
Либо включить его как Bean в конфигурацию клиента:
@Bean
public CustomErrorDecoder customErrorDecoder() {
return new CustomErrorDecoder();
}
или запишите его в конфигурацию приложения:
feign:
client:
config:
myCustomRestClientName:
retryer: com.a.b.some.package.CustomRetryer
errorDecoder: com.a.b.some.package.CustomErrorDecoder
Оба способа не вызывают ErrorDecoder. Что я делаю не так? Создается экземпляр Bean, и мой CustomErrorDecoder выглядит так:
@Component
public class CustomErrorDecoder implements ErrorDecoder {
private final ErrorDecoder defaultErrorDecoder = new Default();
@Override
public Exception decode(String s, Response response) {
Exception exception = defaultErrorDecoder.decode(s, response);
if (exception instanceof RetryableException) {
return exception;
}
if (response.status() == 504) {
// throwing new RetryableException to retry 504s
}
return exception;
}
}
Обновление:
Я создал минимальный воспроизводимый пример в this git repo . Просмотрите историю коммитов, чтобы найти 3 способа, которые я пробовал.