如何从Jetty';什么是HttpClient?
是否可以使用Jetty发出异步HTTP请求并返回一个可完成的未来 我读过,但找不到任何这样做的例子。我找到了,但我不知道如何使用公共API访问它如何从Jetty';什么是HttpClient?,jetty,completable-future,Jetty,Completable Future,是否可以使用Jetty发出异步HTTP请求并返回一个可完成的未来 我读过,但找不到任何这样做的例子。我找到了,但我不知道如何使用公共API访问它 更新:我需要CompletableFuture来返回响应正文(不仅仅是响应代码和标题)。用这种方式将completablelistener转换为CompletableFuture很简单: CompletableFuture completable=newpromise.completable(); httpClient.newRequest(…).se
更新:我需要
CompletableFuture
来返回响应正文(不仅仅是响应代码和标题)。用这种方式将completablelistener
转换为CompletableFuture
很简单:
CompletableFuture completable=newpromise.completable();
httpClient.newRequest(…).send(结果->{
if(result.isFailed()){
completable.CompleteException(result.getFailure());
}否则{
完成(结果);
}
});
但是,您是对的,这可以由
HttpClient
本身完成。跟踪。通过以下方式将CompleteListener
转换为CompletableFuture
是很简单的:
CompletableFuture completable=newpromise.completable();
httpClient.newRequest(…).send(结果->{
if(result.isFailed()){
completable.CompleteException(result.getFailure());
}否则{
完成(结果);
}
});
但是,您是对的,这可以由
HttpClient
本身完成。跟踪。我一直在jetty client 9.4.x中使用此功能
var completable = new CompletableFuture<ContentResponse>();
client
.newRequest(uri)
.send(new CompletableFutureResponseListener(completable));
var completable=new CompletableFuture();
客户
.newRequest(uri)
.发送(新的CompletableFutureResponseListener(completable));
在哪里
public class CompletableFutureResponseListener extends BufferingResponseListener {
private final CompletableFuture<ContentResponse> completable;
public CompletableFutureResponseListener(
CompletableFuture<ContentResponse> completable) {
this.completable = completable;
}
@Override
public void onComplete(Result result) {
if (result.isFailed()) {
completable.completeExceptionally(result.getFailure());
} else {
var response =
new HttpContentResponse(
result.getResponse(),
getContent(),
getMediaType(),
getEncoding());
completable.complete(response);
}
}
}
公共类CompletableFutureResponseListener扩展了BufferingResponseListener{
私人最终可完成未来可完成;
公共完全未来响应侦听器(
可完成(未来可完成){
this.completable=可完成;
}
@凌驾
未完成的公共无效(结果){
if(result.isFailed()){
completable.CompleteException(result.getFailure());
}否则{
var响应=
新的HttpContentResponse(
result.getResponse(),
getContent(),
getMediaType(),
getEncoding());
可完成。完成(响应);
}
}
}
我一直在jetty client 9.4.x中使用此功能
var completable = new CompletableFuture<ContentResponse>();
client
.newRequest(uri)
.send(new CompletableFutureResponseListener(completable));
var completable=new CompletableFuture();
客户
.newRequest(uri)
.发送(新的CompletableFutureResponseListener(completable));
在哪里
public class CompletableFutureResponseListener extends BufferingResponseListener {
private final CompletableFuture<ContentResponse> completable;
public CompletableFutureResponseListener(
CompletableFuture<ContentResponse> completable) {
this.completable = completable;
}
@Override
public void onComplete(Result result) {
if (result.isFailed()) {
completable.completeExceptionally(result.getFailure());
} else {
var response =
new HttpContentResponse(
result.getResponse(),
getContent(),
getMediaType(),
getEncoding());
completable.complete(response);
}
}
}
公共类CompletableFutureResponseListener扩展了BufferingResponseListener{
私人最终可完成未来可完成;
公共完全未来响应侦听器(
可完成(未来可完成){
this.completable=可完成;
}
@凌驾
未完成的公共无效(结果){
if(result.isFailed()){
completable.CompleteException(result.getFailure());
}否则{
var响应=
新的HttpContentResponse(
result.getResponse(),
getContent(),
getMediaType(),
getEncoding());
可完成。完成(响应);
}
}
}
如果我错了,请纠正我,但我认为此选项不会返回响应正文。我们需要更复杂一点,才能在不阻塞的情况下返回ContentResponse
。是的,但是当您设置请求来处理内容时,您可以添加Response.ContentListener
。如果我错了,请纠正我,但我认为此选项不会返回响应正文。我们需要更复杂一点,以便在不阻塞的情况下返回ContentResponse
。正确,但您可以在设置请求以处理内容时添加Response.ContentListener
。