gpt4 book ai didi

spring-boot - 使用 Spring WebClient 返回完整的响应

转载 作者:行者123 更新时间:2023-12-05 01:10:29 25 4
gpt4 key购买 nike

我有以下代码

public ClientResponse doGet(HttpServletRequest request, URI uri) {
return webClient.get()
.uri(uri.toASCIIString())
.headers(headers -> headers.putAll(processRequest(request))
.exchange()
.block();
}

但是当我尝试如下通过 RestController 返回这个 ClientResponse 时,

@GetMapping
@ResponseBody
public ClientResponse doGet(HttpServletRequest request) {
ClientResponse node = service.doGet(request);
return node;
}

我收到以下错误:

org.springframework.http.converter.HttpMessageNotWritableException: Noconverter found for return value of type: classorg.springframework.web.reactive.function.client.DefaultClientResponse

基本上,我想要的最终目标是将实际响应返回给调用者 - 包括 header 、正文、cookies 等。

我正在考虑像下面这样使用 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 返回响应而不是重构响应?

最佳答案

ClientResponse 的 toEntity 方法将其转换为 ResponseEntity 对象。所以我想到了以下内容。

public ResponseEntity<String> doGet2(HttpServletRequest request, URI uri) {
ClientResponse clientResponse = webClient.get()
.uri(uri.toASCIIString())
.headers(headers -> headers.putAll(processRequest(request)))
.exchange()
.block();

return clientResponse.toEntity(String.class).block();
}

关于spring-boot - 使用 Spring WebClient 返回完整的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64061916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com