SpringBoot项目里面发起http请求的几种方法

 更新时间:2025年12月04日 09:14:29   作者:阿黄学技术  
Spring Boot发起HTTP请求有多种方法,包括:RestTemplate,WebClient, HttpClient, Feign Client,第三方库如OkHttp和Apache HttpClient,下面就来详细的介绍一下如何实现,感兴趣的可以了解一下

在Spring Boot项目中,有几种常用的方式可以发起HTTP请求,以下是主要的几种方法:

1. 使用RestTemplate (Spring 5之前的主流方式)

// 需要先注入RestTemplate
@Autowired
private RestTemplate restTemplate;

public void makeRequest() {
    // GET请求
    ResponseEntity<String> response = restTemplate.getForEntity(
        "https://api.example.com/data", String.class);
    
    // POST请求
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    HttpEntity<String> request = new HttpEntity<>("{\"key\":\"value\"}", headers);
    ResponseEntity<String> response = restTemplate.postForEntity(
        "https://api.example.com/data", request, String.class);
}

2. 使用WebClient (Spring 5+推荐的响应式方式)

// 需要添加spring-boot-starter-webflux依赖
WebClient webClient = WebClient.create();

// GET请求
Mono<String> response = webClient.get()
    .uri("https://api.example.com/data")
    .retrieve()
    .bodyToMono(String.class);

// POST请求
Mono<String> response = webClient.post()
    .uri("https://api.example.com/data")
    .contentType(MediaType.APPLICATION_JSON)
    .bodyValue("{\"key\":\"value\"}")
    .retrieve()
    .bodyToMono(String.class);

3. 使用HttpClient (Java 11+内置)

HttpClient client = HttpClient.newHttpClient();

// GET请求
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.example.com/data"))
    .build();

// POST请求
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.example.com/data"))
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString("{\"key\":\"value\"}"))
    .build();

// 发送请求
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

4. 使用Feign Client (声明式REST客户端)

// 需要添加spring-cloud-starter-openfeign依赖
@FeignClient(name = "exampleClient", url = "https://api.example.com")
public interface ExampleClient {
    @GetMapping("/data")
    String getData();
    
    @PostMapping("/data")
    String postData(@RequestBody String body);
}

// 使用
@Autowired
private ExampleClient exampleClient;

public void makeRequest() {
    String response = exampleClient.getData();
}

5. 使用第三方库如OkHttp或Apache HttpClient

OkHttp示例:

OkHttpClient client = new OkHttpClient();

// GET请求
Request request = new Request.Builder()
    .url("https://api.example.com/data")
    .build();

// POST请求
RequestBody body = RequestBody.create(
    "{\"key\":\"value\"}", MediaType.parse("application/json"));
Request request = new Request.Builder()
    .url("https://api.example.com/data")
    .post(body)
    .build();

// 发送请求
Response response = client.newCall(request).execute();

Apache HttpClient示例:

CloseableHttpClient httpClient = HttpClients.createDefault();

// GET请求
HttpGet httpGet = new HttpGet("https://api.example.com/data");

// POST请求
HttpPost httpPost = new HttpPost("https://api.example.com/data");
StringEntity entity = new StringEntity("{\"key\":\"value\"}");
httpPost.setEntity(entity);
httpPost.setHeader("Content-type", "application/json");

// 发送请求
CloseableHttpResponse response = httpClient.execute(httpPost);

选择建议

  • 对于新项目,推荐使用 WebClient (响应式) 或 HttpClient (Java内置)
  • 如果使用Spring Cloud,Feign Client 是一个很好的选择
  • RestTemplate 虽然仍可使用,但已进入维护模式,不推荐新项目使用
  • 需要更多控制时,可以考虑 OkHttpApache HttpClient

到此这篇关于SpringBoot项目里面发起http请求的几种方法的文章就介绍到这了,更多相关SpringBoot发起http请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot中优化if-else语句的七种方法

    SpringBoot中优化if-else语句的七种方法

    if-else语句是控制流程的基本工具,但过度使用会使代码变得复杂且难以维护,在SpringBoot , SpringCloud项目中,优化if-else结构变得尤为重要,本文将深入探讨七种策略,旨在减少SpringBoot , SpringCloud项目中 if-else的使用,需要的朋友可以参考下
    2024-07-07
  • Spring中基于xml配置管理Bean的步骤

    Spring中基于xml配置管理Bean的步骤

    Spring容器通常理解为BeanFactory或者ApplicationContext,我们知道spring的IOC容器能够帮我们创建对象,对象交给spring管理之后我们就不用手动去new对象,这篇文章主要介绍了Spring中基于xml配置管理Bean的步骤,需要的朋友可以参考下
    2023-11-11
  • MyBatis使用<foreach>标签like查询报错解决问题

    MyBatis使用<foreach>标签like查询报错解决问题

    这篇文章主要介绍了MyBatis使用<foreach>标签like查询报错解决问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 教你使用idea搭建ssm详细教程(Spring+Spring Mvc+Mybatis)

    教你使用idea搭建ssm详细教程(Spring+Spring Mvc+Mybatis)

    今天教大家使用idea搭建ssm详细教程(Spring+Spring Mvc+Mybatis),文中有非常详细的图文介绍及代码示例,对正在学习使用idea的小伙伴很有帮助,需要的朋友可以参考下
    2021-05-05
  • Java中SimpleDateFormat方法超详细分析

    Java中SimpleDateFormat方法超详细分析

    这篇文章主要给大家介绍了关于Java中SimpleDateFormat方法超详细分析的相关资料,SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • 深入了解JAVA 虚引用

    深入了解JAVA 虚引用

    这篇文章主要介绍了JAVA 虚引用的相关资料,帮助大家更好的理解和学习JAVA,感兴趣的朋友可以了解下
    2020-08-08
  • SpringCloud与Consul集成实现负载均衡功能

    SpringCloud与Consul集成实现负载均衡功能

    负载均衡基本概念有:实服务、实服务组、虚服务、调度算法、持续性等,其常用应用场景主要是服务器负载均衡,链路负载均衡。这篇文章主要介绍了SpringCloud与Consul集成实现负载均衡 ,需要的朋友可以参考下
    2018-09-09
  • IDEA 2020.3 更新了机器学习都整上了

    IDEA 2020.3 更新了机器学习都整上了

    IDEA 欢迎窗口全新升级,首页增加三个选项卡,一个用于设置 IDE 界面的 Customize,一个用于插件安装的 Plugins,一个于访问帮助和学习资源的 Learn IntelliJ IDEA,另外包括之前用于管理项目的 Projects,需要的朋友可以参考下
    2020-12-12
  • Springboot项目实现Mysql多数据源切换的完整实例

    Springboot项目实现Mysql多数据源切换的完整实例

    这篇文章主要给大家介绍了关于Springboot项目实现Mysql多数据源切换的完整实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java iterator常见用法

    Java iterator常见用法

    Iterator 是 Java 集合框架中最常用的遍历工具,适用于所有集合类型,它提供了简单、安全的遍历方式,同时支持动态删除操作,本文给大家介绍Java iterator 详解,感兴趣的朋友一起看看吧
    2025-04-04

最新评论