Я рекомендую протестировать ваш код, использующий WebClient
, чтобы увидеть, как он обрабатывает различные упомянутые вами сценарии. Вы можете легко проверить свой код на что-то вроде MockWebServer
из модульных тестов. MockWebServer
может симулировать большинство ошибок, упомянутых здесь.
Сказав это, вот что я видел в своем тестировании при использовании WebClient
с ReactorClientHttpConnector
. Другие соединители могут выдавать немного другие исключения, но, вероятно, будут иметь общий класс в иерархии классов исключений, как указано ниже.
Неизвестный хост
java.net.UnknownHostException
В соединении отказано (порт не открыт на сервере)
java.net.ConnectException
(или подкласс)
реактор-нетти io.netty.channel.AbstractChannel$AnnotatedConnectException
Время ожидания подключения
Если у вас настроен тайм-аут соединения , то вы получите java.net.ConnectException
(или подкласс)
реактор-нетти io.netty.channel.ConnectTimeoutException
Ошибка SSL-квитирования
javax.net.ssl.SSLHandshakeException
(или подкласс)
Ошибка кодировки тела запроса
Это зависит от используемого кодера, но обычно будет org.springframework.core.codec.EncodingException
(или подкласс)
Некоторые кодировщики также выдают java.lang.IllegalStateException
, если кодировка настроена неправильно
Ошибка декодирования тела ответа
Это зависит от используемого декодера, но обычно будет org.springframework.core.codec.DecodingException
(или подкласс)
Некоторые декодеры также выдают java.lang.IllegalStateException
, если декодирование настроено неправильно
Время ожидания чтения
Если вы используете реактор-нетто, и вы настроили io.netty.handler.timeout.ReadTimeoutHandler
, то io.netty.handler.timeout.ReadTimeoutException
Если вы используете оператор .timeout
где-нибудь в цепочке вызовов реактивного потока, тогда java.util.concurrent.TimeoutException
Время ожидания записи
Если вы используете реактор-нетто, и вы настроили io.netty.handler.timeout.WriteTimeoutHandler
, тогда io.netty.handler.timeout.WriteTimeoutException
Соединение закрыто сервером преждевременно (до завершения ответа)
java.io.IOException
(или подкласс)
реактор-нетти reactor.netty.http.client.PrematureCloseException
Другие
Любые исключения, которые происходят во время вашего someResponseHandler::handleResponse