...
¡Ojo! Por defecto, las llamadas con WebClient son asíncronas, no bloqueantes. La instrucción block() del final sirve para hacerlas bloqueantes, para esperar a la respuesta antes de seguir.
Para obtener las respuestas, disponemos de dos clases Mono y Flux, vamos a ver para qué usamos cada una.
Recibir un solo elemento: Mono
Como hemos visto en el ejemplo anterior, con .bodyToMono indicamos que se recibe un elemento, y la respuesta se mapeará a la clase que pongamos. De este modo, se podrá mapear directamente a un DTO propio si la estructura de la respuesta coincide con éste.
En el caso de que queramos obtener la respuesta como un Map con las claves y valores que hemos recibido, haremos uso de ParameterizedTypeReference, así:
| Bloque de código | ||
|---|---|---|
| ||
.bodyToMono( new ParameterizedTypeReference<Map<String, Object>>() {} ).block(); |
Recibir una lista de elementos: Flux
En el caso de que vayamos a recibir una lista de elementos, podemos usar Flux. La forma de usarlo es muy parecida a Mono, pero utilizando .bodyToFlux en lugar de .bodyToMono, e indicando .collectList después para obtener la lista. Por ejemplo, para recibir una lista de Strings sería:
| Bloque de código | ||
|---|---|---|
| ||
.bodyToFlux(String.class).collectList().block(); |
Y para recibir una lista de Maps, al igual que hemos visto en Mono:
| Bloque de código |
|---|
.bodyToFlux( new ParameterizedTypeReference<Map<String, Object>>() {} ).collectList().block(); |
Body con Content-Type: application/x-www-form-urlencoded
...