Как обрабатывать ошибки при выполнении асинхронного запроса с HTTP-клиентом Java? - PullRequest
2 голосов
/ 24 мая 2019

Я использую новый клиент Java 11 HTTP.У меня есть запрос как:

httpClient.sendAsync(request, discarding())

Как добавить обработчик для ошибок HTTP?Мне нужно регистрировать ошибки, но я хочу сохранить запрос асинхронным.

В настоящее время ошибки HTTP, такие как 400 или 500, не отображаются.Я хотел бы записать код состояния и тело ответа в этих случаях.Я полагаю, что CompletableFuture похоже на обещание, поэтому ответа там пока нет.

1 Ответ

2 голосов
/ 24 мая 2019

Вам просто нужно зарегистрировать зависимое действие с завершаемым будущим, возвращаемым 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
}
...