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

标签 java java-11 java-http-client

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

httpClient.sendAsync(request, discarding())

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

目前,HTTP 错误如 400500 ,沉默。
我想在这些情况下记录状态代码和响应正文。
我想 CompletableFuture就像一个 promise ,所以那里还没有回复。

最佳答案

你只需要用 HttpClient::sendAsync 返回的可完成 future 注册一个依赖 Action 。

下面是一个例子:

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
}

关于java - 使用 HTTP Java 客户端执行异步请求时如何处理错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56289893/

相关文章:

java - Android - 在电容式触摸屏上检测触摸压力?

java - Hazelcast - 如何在成员处于运行模式期间从 hazelcast 中完全删除 IQueue

java - Hibernate 上的内连接查询 - SQL 查询目前不支持迭代

java - 使用 JDK 11 HttpClient 进行代理身份验证

java - 如何在Java 11 HttpClient中执行 "OPTIONS"HTTP方法请求

java - Spring @ModelAttribute 接口(interface)

java - 如何为使用 JDK 11 编译的 java 程序将 JRE 与 Launch4j 捆绑在一起?

JavaFX Integer Spinner (IntegerSpinnerValueFactory) 不会将值环绕到最小值

java - jshell : Exception in thread "main" java. awt.AWTError:无法使用 ':0' 作为 DISPLAY 变量的值连接到 X11 窗口服务器

java - jdk.incubator.httpclient 中的 NullPointerException