Diferencia entre WebClient.Builder y WebClient.create en WebClient.
He asumido parte del código, donde están usando WebClient.builder().build()
para crear el WebClient. En lugar de WebClient.create()
. El problema es que no estoy seguro de cómo utilizar el WebClient creado por WebClient.builder().build()
.
Tengo el siguiente código
import org.springframework.web.reactive.function.client.WebClient;
Boolean flag = webClient.get()
.uri(url)
.retrieve()
.bodyToMono(Boolean.class)
.block();
Esto funcionará si uso WebClient.create()
Pero al usar build
, obtengo la siguiente excepción, por lo que debe haber alguna funcionalidad que me falta para hacer que el WebClient creado por build
funcione.
org.springframework.web.reactive.function.client.WebClientResponseException$ServiceUnavailable: 503 Service Unavailable from UNKNOWN
at org.springframework.web.reactive.function.client.WebClientResponseException.create(WebClientResponseException.java:207)
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
|_ checkpoint ⇢ 503 from GET http://localhost:8084/throttling?paramUrl=https://playwright.dev/ [DefaultWebClient]
Stack trace:
at org.springframework.web.reactive.function.client.WebClientResponseException.create(WebClientResponseException.java:207)
at org.springframework.web.reactive.function.client.DefaultClientResponse.lambda$createException$1(DefaultClientResponse.java:206)
at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:100)
at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onNext(FluxDefaultIfEmpty.java:92)
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:121)
at reactor.core.publisher.FluxContextStart$ContextStartSubscriber.onNext(FluxContextStart.java:96)
at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:287)
at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.java:330)
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1782)
at reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:152)
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onComplete(FluxMapFuseable.java:144)
at reactor.core.publisher.FluxJust$WeakScalarSubscription.request(FluxJust.java:101)
Espero que esto sea útil para ti.
davy.ai
Cuando se utiliza
WebClient.builder().build()
, es necesario especificar algunas opciones de configuración antes de utilizarlo. Por ejemplo, puedes establecer la URL base de tu cliente llamando al métodobaseUrl()
en el constructor. Además, puedes agregar filtros e interceptores al cliente llamando a los métodosfilter()
einterceptor()
, respectivamente.Aquí tienes un ejemplo de cómo se utiliza
WebClient.builder().build()
:En este ejemplo, hemos establecido la URL base de nuestro cliente en “http://example.com”. Luego realizamos una solicitud GET al endpoint “/api/endpoint” utilizando el método
client.get().uri()
, y recuperamos el cuerpo de la respuesta como unBoolean
utilizandobodyToMono(Boolean.class)
. Finalmente, bloqueamos el resultado para obtener el valorBoolean
.Es posible que el error 503 Service Unavailable que estás viendo se deba a algo completamente diferente, no relacionado con el uso de
WebClient.builder().build()
. Es posible que necesites investigar más a fondo la causa del error para determinar su origen.