springboot项目发http请求
时间: 2025-05-09 08:31:00 浏览: 15
### 如何在 Spring Boot 中发起 HTTP 请求
#### 使用 RestTemplate 发起 HTTP 请求
尽管官方推荐使用 `WebClient`,但在某些场景下仍可继续利用 `RestTemplate` 进行同步调用。以下是基于 `RestTemplate` 的简单 GET 和 POST 请求实现方法。
对于简单的 GET 请求:
```java
// 创建 RestTemplate 实例
RestTemplate restTemplate = new RestTemplate();
// 执行GET请求并接收返回的结果
String result = restTemplate.getForObject("http://example.com/api", String.class);
System.out.println(result); // 输出获取到的数据
```
针对带有参数的 GET 请求,则可以通过 URL 参数传递数据给服务器端[^1]。
当涉及到提交表单或 JSON 数据时,POST 方法更为常用:
```java
// 构建要发送的对象实体
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
Map<String, Object> map = new HashMap<>();
map.put("key", "value");
HttpEntity<Map<String, Object>> request = new HttpEntity<>(map, headers);
// 发送POST请求并将响应转换为目标对象类型
ResponseEntity<String> response = restTemplate.postForEntity(
"http://example.com/api/post",
request,
String.class
);
System.out.println(response.getBody()); // 处理接收到的信息
```
#### 使用 WebClient 发起 HTTP 请求
随着 Spring 5 推出了新的反应式编程模型,`WebClient` 成为了更现代化的选择,尤其适合处理异步操作和流式传输的大文件下载等需求。这里展示了一个基础的例子来说明怎样创建客户端实例以及执行相应的网络通信任务。
初始化 `WebClient.Builder` 并配置默认设置:
```java
WebClient webClient = WebClient.builder()
.baseUrl("https://api.example.com") // 设置API的基础URL地址
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.build(); // 构造最终版本供后续调用
```
接着就可以轻松地发出各种类型的 HTTP 调用了。比如读取资源列表:
```java
Mono<List<Item>> items = webClient.get() // 指定为GET方式
.uri("/items") // 添加具体的路径部分
.retrieve() // 获取远程服务回应体中的内容
.bodyToFlux(Item.class) // 将JSON数组映射成Java集合形式
.collectList(); // 收集所有的Item记录形成完整的列表
```
而上传多部件(Multipart)表单则显得更加直观简洁:
```java
MultipartBodyBuilder builder = new MultipartBodyBuilder();
builder.part("file", resource); // 加入待传送的二进制资料项
builder.part("description", "This is a test file."); // 同时附带其他字段信息
webClient.post().uri("/upload")
.contentType(MediaType.MULTIPART_FORM_DATA)
.body(BodyInserters.fromMultipartData(builder.build()))
.exchange()
.flatMap(clientResponse -> clientResponse.bodyToMono(String.class))
.subscribe(System.out::println); // 订阅事件监听器用于打印输出结果
```
上述两种方案均能有效地满足不同业务逻辑下的 API 调用需求,不过考虑到未来维护性和性能优化方面的原因,在新建项目里优先考虑采用 `WebClient` 是明智之举[^2][^3]。
阅读全文
相关推荐


















