Me pregunto si hay una mejor manera de obtener una respuesta de error en WebClient de una manera que no implique el uso de ObjectMapper adicional al llamar a onErrorResume .
En mi cliente web:
import org.springframework.web.reactive.function.client.WebClientResponseException.BadRequest // ... .onErrorResume(BadRequest::class.java, badRequestToMyDto()) private fun badRequestToMyDto(): (BadRequest) -> Mono<out MyDto> = { it: BadRequest -> val error = objectMapper.readValue<ErrorResponseDto>(it.responseBodyAsByteArray) // ... } Hay un método .bodyToMono , así que me pregunto si hay algo similar que pueda usarse en onErrorResume .
Puede usar retrieve() en combinación con onStatus para obtener acceso a la respuesta del cliente cuando se trata de un "error". Luego puede invocar bodyToMono en él para desorganizar la respuesta a un objeto java. Según el tipo de contenido del cuerpo de la respuesta, Spring usará el decodificador correcto. Por ejemplo, si el cuerpo es json, usará un ObjectMapper para desorganizar.
WebClient.builder().build() .get() .uri("localhost:8080") .retrieve() .onStatus(HttpStatus::isError, clientResponse -> clientResponse.bodyToMono(MyErrorResponse.class) .flatMap(body -> { // logic }) )