【问题标题】:Spring WebFlux WebClient builder set request bodySpring WebFlux WebClient 构建器设置请求正文
【发布时间】:2020-07-12 11:08:45
【问题描述】:

在WebClient.Builder的情况下,我们如何设置请求体?这是我的代码-

WebClient.Builder webClientBuilder = WebClient.builder().baseUrl(clientMetadataServiceUri).defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).filters(exchangeFilterFunctions -> {
        exchangeFilterFunctions.add(logRequest());
        exchangeFilterFunctions.add(logResponse());
    });

webClientBuilder.clientConnector(getHttpConnector()).build().get().exchange().doOnSuccess(clientResponse -> {...})

我应该在哪里以及如何在此处添加请求正文?

【问题讨论】:

    标签: spring spring-boot spring-mvc spring-webflux spring-webclient


    【解决方案1】:

    我相信这是不可能的。

    一般来说,WebClient(或RestTemplate)就像一个模板,你可以用它来调用其他的 Rest Service。你定义这个模板一次,所有需要的自定义,如拦截器、消息转换器、错误处理程序等,你需要与这个特定的服务通信。

    现在是对服务的个人调用,对服务的每次调用可能会有所不同。例如,您可能正在调用不同的方法,如 Get、Post.. 等。您可能会调用不同的端点。你可以打电话有/没有身体。由于您始终使用相同的客户端(WebClient/RestTemplate)与该服务进行通信,因此您无法使用特定于单个调用的主体或方法或 url(您只能设置 baseUrl)创建 WebClient 实例。

    这类似于 RestTemplateBuilder。您找不到任何方法来设置端点或方法或正文。

    您可以为每个调用创建一个单独的 webclient 实例。但这不是通常使用或建议的方式(通常您定义一个 WebClient 类型的 bean 并自动装配它)。因此它不可用。

    【讨论】:

      【解决方案2】:

      问题在于 get() 和许多其他框架一样,Spring WebFlux 也不支持 get 调用的请求正文。在 post 的情况下,它是这样的 -

          WebClient.Builder webClientBuilder = WebClient.builder().baseUrl(clientMetadataServiceUri).defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).filters(exchangeFilterFunctions -> {
              exchangeFilterFunctions.add(logRequest());
              exchangeFilterFunctions.add(logResponse());
          });
      
      webClientBuilder.clientConnector(getHttpConnector()).build().post().body(...).exchange().doOnSuccess(clientResponse -> {...})
      

      【讨论】:

      • 这是不同的东西。只要您致电build。你正在处理WebClient 而不是WebClient.Builder
      猜你喜欢
      • 2020-01-30
      • 2021-12-21
      • 2019-07-23
      • 2019-04-13
      • 2018-08-06
      • 2020-09-02
      • 1970-01-01
      • 2018-05-09
      • 2016-08-11
      相关资源
      最近更新 更多