我正在使用新的Java 11 HTTP客户端。我有一个请求如下:
httpClient.sendAsync(request, discarding())
如何添加HTTP错误处理程序?我需要记录错误,但希望保持请求异步。
目前,HTTP错误(如400或500)是不会提示的。我想在这些情况下记录状态码和响应主体。我想CompletableFuture就像一个promise一样,所以回复在那里还不可用。
我正在使用新的Java 11 HTTP客户端。我有一个请求如下:
httpClient.sendAsync(request, discarding())
HttpClient::sendAsync
返回的CompletableFuture注册一个依赖的操作即可。public static void main(String[] argv) {
var client = HttpClient.newBuilder().build();
var request = HttpRequest.newBuilder()
.uri(URI.create("http://www.example.com/"))
.build();
var cf = client.sendAsync(request, HttpResponse.BodyHandlers.discarding())
.thenApplyAsync((resp) -> {
int status = resp.statusCode();
if (status != 200) {
System.err.println("Error: " + resp.statusCode());
} else {
System.out.println("Success: " + resp.statusCode());
}
return resp;
});
cf.join(); // prevents main() from exiting too early
}
join
不会再次阻塞吗? - Luís SoaressendAsync
了吧?如果它是阻塞的,我只需使用send
即可。 - Luís Soares
CompletableFuture<HttpResponse<T>>
,你想从中推断出什么或者是有什么遗漏是你所要求的吗? - Naman