在springboot 中使用Apache HttpClient 5的详细示例

Apache HttpComponents Client 5.x 是 HttpClient 的最新版本,与 4.x 系列相比,5.x 系列进行了许多改进和重构,提供了更现代的 API 和更好的性能。
以下是使用步骤

步骤 1:添加依赖

在你的 pom.xml 文件中添加 Apache HttpClient 5.x 的依赖:

<dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5</artifactId>
    <version>5.1</version>
</dependency>

步骤 2:配置 HttpClient Bean

在你的 Spring Boot 应用程序中,配置一个 HttpClient 5.x 的 Bean。你可以在一个配置类中进行这个操作:

import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HttpClientConfig {

    @Bean
    public CloseableHttpClient httpClient() {
        return HttpClients.createDefault();
    }
}

步骤 3:创建一个服务类来使用 HttpClient

创建一个服务类来使用 HttpClient 5.x 发起 HTTP 请求:

import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.classic.methods.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;

@Service
public class ApiService {

    @Autowired
    private CloseableHttpClient httpClient;

    public String getData(String url) throws IOException {
        HttpGet request = new HttpGet(url);
        try (CloseableHttpResponse response = httpClient.execute(request)) {
            return EntityUtils.toString(response.getEntity());
        }
    }
}

步骤 4:使用服务类

在你的控制器或其他服务类中注入 ApiService 并调用它的方法:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;

@RestController
public class ApiController {

    @Autowired
    private ApiService apiService;

    @GetMapping("/fetch-data")
    public String fetchData(@RequestParam String url) {
        try {
            return apiService.getData(url);
        } catch (IOException e) {
            e.printStackTrace();
            return "Error fetching data";
        }
    }
}

完整示例

综合以上步骤,下面是一个完整的 Spring Boot 应用示例,使用 Apache HttpClient 5.x:

import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.classic.methods.CloseableHttpResponse;
import org.apache.hc.core5.http.io.entity.EntityUtils;

import java.io.IOException;

@SpringBootApplication
public class HttpClientExampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(HttpClientExampleApplication.class, args);
    }
}

@Configuration
class HttpClientConfig {

    @Bean
    public CloseableHttpClient httpClient() {
        return HttpClients.createDefault();
    }
}

@Service
class ApiService {

    @Autowired
    private CloseableHttpClient httpClient;

    public String getData(String url) throws IOException {
        HttpGet request = new HttpGet(url);
        try (CloseableHttpResponse response = httpClient.execute(request)) {
            return EntityUtils.toString(response.getEntity());
        }
    }
}

@RestController
class ApiController {

    @Autowired
    private ApiService apiService;

    @GetMapping("/fetch-data")
    public String fetchData(@RequestParam String url) {
        try {
            return apiService.getData(url);
        } catch (IOException e) {
            e.printStackTrace();
            return "Error fetching data";
        }
    }
}

在这个示例中,HttpClientConfig 配置类定义了一个 CloseableHttpClient Bean。ApiService 服务类使用这个 Bean 来发起 HTTP 请求,并在 ApiController 控制器中调用 ApiService 的方法来处理 /fetch-data 请求。

通过这种方式,你可以在 Spring Boot 应用程序中灵活地使用 Apache HttpClient 5.x 发起和处理 HTTP 请求。

posted @   gongchengship  阅读(2108)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示