Lun*_*ape 2 java spring-boot spring-webflux
我正在尝试在WebClient没有请求正文的情况下对 api 进行 POST 调用(该 api 不需要正文):
webClient.post()\n .uri("url")\n .retrieve()\n .bodyToMono(CustomResponse.class);\nRun Code Online (Sandbox Code Playgroud)\n\n但调用返回异常:
\n\n\n\n\n底层 HTTP 客户端已完成,\n 未发出响应。java.lang.IllegalStateException: 底层 HTTP 客户端已完成,\n 未发出响应。
\n
对于另一个需要请求正文的 API,我可以成功地进行 POST 调用,没有任何问题:
\n\nwebClient.post()\n .uri("url")\n .bodyValue("value")\n .retrieve()\n .bodyToMono(CustomResponse.class);\nRun Code Online (Sandbox Code Playgroud)\n\n问题是否与 WebClient\xe2\x80\x99s 请求正文有关?我如何解决它?
\n\n更新
\n\n发生错误的原因是我ContentType通过 添加了 Webclient 的标头.defaultHeader("ContentType", JSON)。\n删除标头后问题就消失了。
看起来下游 Web 服务响应太慢并且超过连接超时,因此您会遇到此问题。
如果您不需要(或者响应没有正文),您可以使用.toBodilessEntity()它。所以你的代码片段可以重写:
webClient.post()
.uri("url")
.retrieve()
.toBodilessEntity();
Run Code Online (Sandbox Code Playgroud)
为什么要使用它?因为你始终负责资源的释放。请阅读“注意”部分。
使用Exchange()时,应用程序有责任消费任何响应内容,无论场景如何(成功、错误、意外数据等)。不这样做可能会导致内存泄漏。有关使用主体的所有可用选项的列表,请参阅ClientResponse 。
| 归档时间: |
|
| 查看次数: |
9380 次 |
| 最近记录: |