У меня есть следующий код
public ClientResponse doGet(HttpServletRequest request, URI uri) {
return webClient.get()
.uri(uri.toASCIIString())
.headers(headers -> headers.putAll(processRequest(request))
.exchange()
.block();
}
Но когда я пытаюсь вернуть этот ClientResponse через RestController следующим образом,
@GetMapping
@ResponseBody
public ClientResponse doGet(HttpServletRequest request) {
ClientResponse node = service.doGet(request);
return node;
}
Я получаю следующую ошибку:
org.springframework.http.converter.HttpMessageNotWritableException: не найден преобразователь для возвращаемого значения типа: class org.springframework.web.reactive.function.client.DefaultClientResponse
По сути, конечная цель, которую я хочу, - это вернуть фактический ответ обратно вызывающей стороне, включая заголовки, тело, файлы cookie и т. Д.
Я думал об использовании ResponseEntity следующим образом.
public ResponseEntity<JsonNode> doGet2(HttpServletRequest request, URI uri) {
Mono<ClientResponse> clientResponse = webClient.get()
.uri(uri.toASCIIString())
.headers(headers -> headers.putAll(processRequest(request))
.exchange();
HttpHeaders headers = clientResponse.map(resp -> resp.headers().asHttpHeaders()).block();
JsonNode body = clientResponse.flatMap(resp -> resp.bodyToMono(JsonNode.class)).block();
ResponseEntity<JsonNode> jsonNode = ResponseEntity.ok().headers(headers).body(body);
return jsonNode;
}
Но это опять перебор. Есть ли способ вернуть ответ напрямую с помощью WebClient вместо реструктуризации ответа?