【问题标题】: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();
}