ClientResponse (org.springframework.web.reactive.function.client.ClientResponse) que muestra inconsistencia en las clases mientras se usa WebClient
Comencé a usar WebClient (org.springframework.web.reactive.function.client.WebClient) para llamar a los servicios de descanso. Tengo 2 clases, dicen Utility.java y ServiceImpl.java. ServiceImpl.java es donde uso WebClient. Una llamada posterior que estoy haciendo parece:
ClientResponse response = webClient.post()
.uri(path)
.body(Mono.just(inputDTO),InputDTO.class)
.exchange()
.block();
(ClientResponse anterior es org.springframework.web.reactive.function.client.ClientResponse) (Estoy usando el intercambio de recuperación porque quiero encabezados y código de estado)
Ahora tratando de convertir esta respuesta en algún DTO - ResponseDTO.
Mono<ResponseEntity<ResponseDTO>> mono = response.toEntity(ResponseDTO.class);
ResponseEntity<ResponseDTO> resEntity = mono.block();
ResponseDTO myObj = resEntity.getBody();
Entonces myObj es un objeto de la clase ResponseDTO.
El problema es que cuando realizo la conversión de 'respuesta en ResponseDTO.java' en mi clase de utilidad, obtengo myObj = null. Pero si lo hago en mi ServiceImpl.java (justo después de llamar a la API de publicación), devuelve el cuerpo adecuado (objeto ResponseDTO). El mismo problema ocurre incluso si realizo la conversión y la operación posterior a la llamada en dos métodos diferentes en ServiceImpl.java. ¿Necesito configurar algo aquí?
Respuestas
Descubrí cuál era el problema. Después de llamar a la API de REST, el cuerpo en la respuesta se elimina después de leerlo de la respuesta por primera vez. Tuve una declaración de Sysout en la clase de implementación del servicio donde estaba leyendo el contenido del cuerpo.
Recomendación: lea el contenido del cuerpo solo una vez y guárdelo en una variable. Úselo donde sea necesario.