Как поймать ConnectionException в Spring WebClient?

У меня в RestTemplate есть следующая обработка ошибок:

try {
   restTemplate.postForObject(..);
} catch (ResourceAccessException e) {
   throw new CustomException("host is down");
}

Вопрос: как добиться того же с пружиной WebClient?

try {
   webClient.post()...block();
} catch (Exception e) {
    //cannot check due to package private access
    //if (e instanceof Exceptions.ReactiveException)
    if (e.getCause() instanceof java.net.ConnectException) {
         throw new CustomException("host is down");
    }
}

Проблема: я не могу напрямую поймать ConnectionException, потому что он заключен внутри ReactiveException. Могу ли я сделать лучше, чем применять несколько instanceof проверок на наличие реальных основных исключений?


person membersound    schedule 12.08.2019    source источник


Ответы (1)


вы бы обработали ошибку реактивно, используя onErrorMap с проверкой, которую вы выполняете в предикате (см. https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html#onErrorMap-java.lang.Class-java.util.function.Function-)

Примечание: не проверял, компилируется ли это, и вы также можете заменить проверку isAssignableFrom на instanceof, если хотите.

WebClient.post().....onErrorMap(t -> t.getCause.isAssignableFrom(ConnectException.class), t -> new CustomException("host is down"));
person Frischling    schedule 12.08.2019