使用 HTTP Java 客户端执行异步请求时如何处理错误?

How to handle errors when executing an async request with HTTP Java Client?

我正在使用新的 Java 11 HTTP 客户端。我有一个请求:

httpClient.sendAsync(request, discarding())

如何为 HTTP 错误添加处理程序?我需要记录错误,但我想保持请求异步。

目前,像 400500 这样的 HTTP 错误是无声的。 我想在那些场合记录状态代码和响应正文。 我想 CompletableFuture 就像一个承诺,所以那里还没有回复。

你只需要用 HttpClient::sendAsync

返回的可完成未来注册一个依赖动作

这是一个例子:

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
}