使用 HTTP Java 客户端执行异步请求时如何处理错误?
How to handle errors when executing an async request with HTTP Java Client?
我正在使用新的 Java 11 HTTP 客户端。我有一个请求:
httpClient.sendAsync(request, discarding())
如何为 HTTP 错误添加处理程序?我需要记录错误,但我想保持请求异步。
目前,像 400
或 500
这样的 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
}
我正在使用新的 Java 11 HTTP 客户端。我有一个请求:
httpClient.sendAsync(request, discarding())
如何为 HTTP 错误添加处理程序?我需要记录错误,但我想保持请求异步。
目前,像 400
或 500
这样的 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
}