GOOGLE ADS

среда, 13 апреля 2022 г.

ErrorDecoder не перехватывает исключение SocketTimeoutException

С feign builder я звоню на внешний URL. Я установил readTimeout как 2 секунды, я получаю исключение SocketTimeoutException, но оно не переходит в ErrorDecoder.

Конфигурация Feign Builder:

Options options = new Options(10000, TimeUnit.MILLISECONDS, 2000,
TimeUnit.MILLISECONDS, false);
return Feign.builder()
.logLevel(level)
.client(client)
.retryer(Retryer.NEVER_RETRY)
.options(options)
.errorDecoder(feignErrorDecoder())
.exceptionPropagationPolicy(UNWRAP);
private ErrorDecoder feignErrorDecoder() {
return (methodKey, response) -> {
return new MyCustomException("ERROR_TIMEOUT",
"Timeout Occurred: " + response.status());
};
}

Когда я вызываю сервисное исключение, не происходит ErrorDecoder. Приближается java.lang.reflect.UndeclaredThrowableException.


Решение проблемы

ErrorDecoder не вызывается при возникновении исключения IOException (SocketTimeoutException). См. SynchronousMethodHandler#executeAndDecode(...). Как правило, декодеры вызываются только тогда, когда ответ возвращается вызовом API. ErrorCoder вызывается только в том случае, если код ошибки http отличается от 2xx и 4xx.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...