Обработка исключения ReadTimeoutException с помощью Spring WebClient

Я звоню в службу REST с помощью Spring WebClient и пытаюсь обработать исключение io.netty.handler.timeout.ReadTimeoutException, которое может время от времени возникать:

            try {
                List<Asset> assets = client.searchAssets("some-type", assetCode);
                // do sometihng
            } catch (ReadTimeoutException ex) {
                log.error("TimeoutException, can't wait no more :)");
            }

Однако, когда возникает исключение тайм-аута, это, похоже, исключение, которое я получаю: WebClientRequestException

Мой вопрос в том, должен ли я поймать это исключение WebClientRequestException? Как я узнаю, было ли это связано с ReadTimeoutException?

0
0
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В Spring WebClient исключения из базовой библиотеки netty (например, io.netty.handler.timeout.ReadTimeoutException) часто заключаются в WebClientRequestException. Вот почему вы видите WebClientRequestException вместо TimeoutException.

Когда вы поймаете исключение WebClientRequestException, вы можете проверить его причину, чтобы узнать, является ли оно исключением TimeoutException. Вот пример того, как это сделать:

try {
    // do something
} catch (WebClientRequestException ex) {
    if (ex.getCause() instanceof TimeoutException) {
        // timeout
    } else {
        // else
    }
}

Имейте в виду, что исключение тайм-аута, с которым вы можете столкнуться, является не стандартным java.util.concurrent.TimeoutException, а скорее io.netty.handler.timeout.TimeoutException. Важно отметить, что обработка этого исключения создаст зависимость (связь) с библиотекой Netty. Если вы измените конфигурацию Spring WebClient и переключите базовую библиотеку с Netty на другую опцию, вы также должны соответствующим образом обновить свой код.

Другие вопросы по теме