简体   繁体   中英

How to catch ConnectionException in Spring WebClient?

I have the following error handling in RestTemplate :

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

Question: how can I achieve the same with spring 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");
    }
}

Problem: I cannot directly catch ConnectionException because it is wrapped inside the ReactiveException . Could I do better than applying multiple instanceof checks for any real underlying exceptions?

you'd handle the error reactively, using onErrorMap with the check you're doing in the predicate (see https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html#onErrorMap-java.lang.Class-java.util.function.Function- )

Note: Didn't check whether this compiles, and you can also replace the isAssignableFrom check with instanceof, if you like.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM