It can be done by 2 ways:-
1. While implementing WebClient
2. While Doing retries
xxxxxxxxxx
public static ExchangeFilterFunction errorHandler() {
return ExchangeFilterFunction.ofResponseProcessor(clientResponse -> {
if (clientResponse.statusCode().is5xxServerError()) {
return clientResponse.bodyToMono(String.class)
.flatMap(errorBody -> Mono.error(new UserDefinedException1(errorBody)));
} else if (clientResponse.statusCode().is4xxClientError()) {
return clientResponse.bodyToMono(String.class)
.flatMap(errorBody -> Mono.error(new UserDefinedException2(errorBody)));
} else {
return Mono.just(clientResponse);
}
});
}
try {
UserDefinedResponse response = webClient
.post()
.body(Mono.just(userDefinedRequest), Map.class)
.retrieve()
.bodyToMono(UserDefinedResponse.class)
.onErrorResume(Mono::error)
.retryWhen(Retry.backoff(3, Duration.of(2, ChronoUnit.SECONDS))
.onRetryExhaustedThrow((retryBackoffSpec, retrySignal) ->
new UserDefinedException(retrySignal.failure())))
.block();
} catch(UserDefinedException userDefinedException){
//Error Handling logic
}
https://medium.com/nerd-for-tech/webclient-error-handling-made-easy-4062dcf58c49