Я звоню в службу 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?
В 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 на другую опцию, вы также должны соответствующим образом обновить свой код.