【问题标题】:What is the difference between request() and submit() in Helidon's WebClientRequestBuilder?Helidon的WebClientRequestBuilder中的request()和submit()有什么区别?
【发布时间】:2021-01-14 16:51:45
【问题描述】:

Helidon 的 WebClientRequestBuilder 有两个相似的 API:request()submit()。两个 API 都返回 Single<WebClientResponse>

request() 的 Javadoc 说...

执行准备好的请求而不期望收到任何特定的 类型。响应未转换,返回的 CompletionStage 为 通知。

submit() 的 Javadoc 说...

执行准备好的请求。收到回复后,不 转换为任何其他特定类型并返回 CompletionStage 是 通知。

这两个 API 有什么区别?难道只是request()加了通配符Accept标头而submit()没有?

【问题讨论】:

    标签: helidon helidon-webclient helidon-httpclient


    【解决方案1】:

    request 方法不发送任何有效负载,它们是可用于将响应实体作为特定类型获取的简写。

    submit 方法可以发送有效负载并始终返回响应未来。

    // do a GET request and consume the response entity as a String
    
    client.get()
          .submit()
          .thenAccept(response -> response.content()
                                          .as(String.class)
                                          .thenAccept(System.out::println));
    
    client.get()
          .request(String.class)
          .thenAccept(System.out::println);
    

    request()submit() 实际上是相同的:

    • request() 没有可使用的响应实体类型,而是返回响应未来。
    • submit() 没有要发送的有效负载,并像其他变体一样返回响应未来。

    【讨论】:

      【解决方案2】:

      WebClientRequestBuilderImpl 有以下源代码。两个 API 做同样的事情。

      @Override
      public Single<WebClientResponse> request() {
          return Contexts.runInContext(context, () -> invoke(Single.empty()));
      }
      
      @Override
      public Single<WebClientResponse> submit() {
          return request();
      }
      

      【讨论】:

        猜你喜欢
        • 2014-12-30
        • 1970-01-01
        • 2019-08-09
        • 2018-01-24
        • 2020-03-04
        • 2011-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多