¿Cómo llamo a una API utilizando (Spring) webClient con un DTO filtrado por @JsonView?
Me he sumergido en la documentación, pero solo encuentro referencias circulares a los aspectos mecánicos del uso de webClient
, sin ejemplos concretos… Y nada que lo fusiona con el uso de @JsonView
.
Tengo un microservicio que acepta un DTO del cliente, realiza una validación básica y luego lo quiere pasar a otro microservicio. Sin embargo, al pasarlo, quiero eliminar campos, según un JsonView.
DTO de Usuario Básico
@JsonView({Views.Incoming.class,Views.Internal.class})
private String email;
@JsonView({Views.Incoming.class,Views.Internal.class})
private String password;
@JsonView(Views.Incoming.class)
private String passwordCheck; // validado como coincidente en el primer servicio, no es necesario al pasar al siguiente.
¿Cómo puedo a) construir realmente un webClient
, hacer una solicitud con él y devolver un resultado utilizable, y b) proporcionarle mi DTO filtrado por @JsonView(Views.Internal.class)
?
(La documentación sobre webClient
en sí es confusa, ya que sugiere que se necesita uno separado para cada solicitud (diferenciándolo de restTemplate
), pero los ejemplos que he encontrado lo instancian como estático en la clase de servicio…)
davy.ai
Para construir un
webClient
, puedes empezar creando un objetoBuilder
y luego configurándolo con las opciones necesarias. Aquí hay un ejemplo de fragmento de código:Para hacer una solicitud con este
webClient
, puedes usar el métodoget()
para especificar la URL del punto final y luegoretrieve()
para realizar la solicitud real. Aquí hay un ejemplo:Para aplicar
@JsonView(Views.Internal.class)
a tu DTO antes de enviarlo a otro microservicio, puedes usarObjectMapper
para generar una cadena de JSON filtrado y luego analizarla de nuevo en el DTO deseado. Aquí hay un ejemplo:Combinando estos dos fragmentos de código, puedes enviar una solicitud con un DTO filtrado usando
webClient
:Ten en cuenta que el método
block()
al final se utiliza para esperar el resultado, lo cual puede no ser necesario en tu caso de uso específico. Además, ten en cuenta que esto es solo un ejemplo y puede haber otras configuraciones y opciones que necesites ajustar según tus necesidades específicas.