4

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

httpClient.sendAsync(request, discarding())

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

400目前,像or ,这样的HTTP 错误500是静默的。我想在这些情况下记录状态代码和响应正文。我想这CompletableFuture就像一个承诺,所以那里还没有回复。

4

1 回答 1

3

您只需要注册一个具有可完成未来返回的依赖操作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
}
于 2019-05-24T10:44:45.007 回答