我正在使用新的Java 11 HTTP Client。我有一个类似的请求:
httpClient.sendAsync(request, discarding())
如何为HTTP错误添加处理程序?我需要记录错误,但我想保持请求异步。
当前,诸如400
或500
之类的HTTP错误是静默的。
在这种情况下,我想记录状态代码和响应正文。
我想CompletableFuture
就像一个诺言,所以那里还没有答复。
答案 0 :(得分:2)
您只需要在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
}