Formas de manejar excepciones como WebClientRequestException debido a la indisponibilidad del servicio para todas las llamadas desde una instancia de WebClient en lugar de manera individual.
Como sugiere el título, estoy utilizando Spring WebClient para invocar una API externa y procesar la respuesta. He agregado una función de filtro de intercambio (ExchangeFilterFunction) para manejar la respuesta basada en el código de estado devuelto por el servidor, algo así como lo siguiente.
ExchangeFilterFunction responseProcessor() {
return ExchangeFilterFunction.ofResponseProcessor(response -> {
if (response.statusCode().isError()) {
return Mono.error(new RuntimeException("Error de WebClient"));
}
return Mono.just(response);
});
}
Ahora, esto funciona bien con los servicios que devuelven una respuesta para la solicitud cuando están activos. Pero cuando el servicio está caído, la solicitud falla con WebClientRequestException, lo cual está bien, pero el error lanzado no es manejado por el responseProcessor y se propaga.
Sé que el error se puede manejar en la llamada de WebClient utilizando alguno de los métodos onErrorXXX. Pero si usamos esa instancia de WebClient para hacer muchas llamadas en diferentes partes del código, el manejo parece ineficiente. Por lo tanto, me gustaría saber si hay una forma de manejar este error para todas las llamadas realizadas por esa instancia de WebClient en lugar de manejarlo en cada una de las invocaciones individuales. Algo similar a lo que hace el responseProcessor para todas las respuestas.
davy.ai
Sí, hay una forma de manejar este error para todas las llamadas realizadas por una instancia de
WebClient
. Puedes agregar unExchangeFilterFunction
para manejar los errores usandoExchangeFilterFunctions.ofErrorConsumer()
. Aquí tienes un ejemplo:Luego puedes agregar este filtro a tu instancia de
WebClient
:Ahora cualquier solicitud realizada a través de esta instancia de
WebClient
tendrá automáticamente la lógica de manejo de errores aplicada.