completablefuture httpClient JAVA 示例
时间: 2024-01-18 10:04:25 浏览: 145
当使用 CompletableFuture 和 HttpClient 来进行异步请求时,可以使用 Java 8+ 提供的 CompletableFuture 类和 Apache HttpClient 库。以下是一个示例代码:
```java
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.concurrent.CompletableFuture;
public class CompletableFutureHttpClientExample {
public static void main(String[] args) {
HttpClient httpClient = HttpClientBuilder.create().build();
CompletableFuture<HttpResponse> future = CompletableFuture.supplyAsync(() -> {
try {
HttpGet httpGet = new HttpGet("https://api.example.com/endpoint"); // 替换为实际的接口地址
return httpClient.execute(httpGet);
} catch (IOException e) {
throw new RuntimeException(e);
}
});
future.thenApply(response -> {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()))) {
StringBuilder responseContent = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
responseContent.append(line);
}
return responseContent.toString();
} catch (IOException e) {
throw new RuntimeException(e);
}
}).thenAccept(responseContent -> {
System.out.println("Response: " + responseContent);
}).exceptionally(ex -> {
System.err.println("Exception occurred: " + ex.getMessage());
return null;
});
// 等待异步请求完成
future.join();
}
}
```
在上述示例中,我们首先创建了一个 HttpClient 实例,并使用 CompletableFuture.supplyAsync 方法来异步执行 HttpGet 请求。然后,通过 thenApply 方法处理响应结果,将响应内容转换为字符串。最后,使用 thenAccept 方法打印响应内容,使用 exceptionally 方法处理异常情况。
需要注意的是,在实际使用中,你可能需要根据第三方接口的要求进行设置,如请求头、请求参数等。此外,还可以使用 CompletableFuture 的其他方法,如 handle、thenCompose、thenCombine 等,来处理更复杂的异步操作。
另外,记得在程序结束前使用 future.join() 来等待异步请求完成,以确保请求的结果能够正常输出。
阅读全文
相关推荐
















