如何从 Spring 5 WebClient ClientResponse 中提取响应标头和状态代码

新手上路,请多包涵

我是 Spring Reactive 框架的新手,正在尝试将 Springboot 1.5.x 代码转换为 Springboot 2.0。我需要在来自 Spring 5 WebClient ClientResponse 的一些过滤、正文和状态代码之后返回响应标头。我不想使用 block() 方法,因为它会将其转换为同步调用。我可以使用 bodyToMono 轻松获得 responsebody。此外,如果我只是返回 ClientResponse,我将获得状态代码、标头和正文,但我需要根据 statusCode 和标头参数处理响应。我试过订阅、平面地图等,但没有任何效果。

例如 - 下面的代码将返回响应正文

Mono<String> responseBody =  response.flatMap(resp -> resp.bodyToMono(String.class));

但是类似的范例无法获取 statusCode 和 Response 标头。有人可以帮助我使用 Spring 5 反应框架提取 statusCode 和标头参数。

原文由 Renus11 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 830
1 个回答

您可以使用 webclient 的交换功能,例如

Mono<String> reponse = webclient.get()
.uri("https://stackoverflow.com")
.exchange()
.doOnSuccess(clientResponse -> System.out.println("clientResponse.headers() = " + clientResponse.headers()))
.doOnSuccess(clientResponse -> System.out.println("clientResponse.statusCode() = " + clientResponse.statusCode()))
.flatMap(clientResponse -> clientResponse.bodyToMono(String.class));

然后你可以转换 bodyToMono 等

原文由 Kevin Hussey 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题