0

HelidonWebClientRequestBuilder有两个类似的 API:request()submit(). 两个 API 都返回Single<WebClientResponse>.

request()的 Javadoc 说……

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

submit()的 Javadoc 说……

执行准备好的请求。收到响应时,不会将其转换为任何其他特定类型并通知返回的 CompletionStage。

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

4

2 回答 2

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()没有要发送的有效负载,并像其他变体一样返回响应未来。
于 2021-01-15T22:03:36.057 回答
0

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

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

@Override
public Single<WebClientResponse> submit() {
    return request();
}
于 2021-01-14T16:53:46.310 回答