Dentro de una solicitud de descanso, envío otra solicitud a un servicio web usando Spring WebClient y quiero devolver el resultado a la persona que llama:
return webClient.post() .uri(url) .body(...) .retrieve() .bodyToMono(String::class.java) .map { ResponseEntity.ok(it) }Ahora que el servicio web devuelve un código de estado de error HTTP, recibo el siguiente error:
java.lang.IllegalStateException: Only one connection receive subscriber allowed.Cuando se devuelve un código de estado 200, no se genera ningún error.
También intenté verificar el estado y lanzar una excepción, pero el comportamiento sigue siendo el mismo:
return webClient.post() .uri(url) .body(...) .retrieve() .onStatus(HttpStatus::isError) { clientResonse -> clientResonse.bodyToMono(String::class.java) .map { RuntimeException(it) } } .bodyToMono(String::class.java) .map { ResponseEntity.ok(it) }¿Qué estoy haciendo mal?
Los ejemplos de código están en Kotlin, pero supongo que todos los desarrolladores de Java pueden leerlo :)
Este es un problema conocido en Spring Framework y se solucionó en Spring Framework 5.1.4; consulte SPR-17564 .
Desafortunadamente, no conozco ninguna solución para este problema, por lo que actualizar a Spring Framework 5.1.4 / Spring Boot 2.1.2 es la única solución hasta ahora.