升级 SpringBoot3 全项目讲解 — Spring Boot 3 中如何发Http请求?
随着 Spring Boot 3 的发布,许多开发者开始考虑将他们的项目升级到这个新版本。Spring Boot 3 带来了许多新特性和改进,尤其是在 HTTP 请求处理方面。本文将详细介绍如何在 Spring Boot 3 中发送 HTTP 请求,并通过代码示例帮助你快速上手。
学会这款 🔥全新设计的 Java 脚手架 ,从此面试不再怕!


1. Spring Boot 3 中的 HTTP 请求工具
在 Spring Boot 3 中,发送 HTTP 请求的方式与之前的版本类似,但也有一些新的改进。常用的 HTTP 请求工具包括:
- RestTemplate:Spring 提供的传统 HTTP 客户端,虽然功能强大,但在 Spring 5 之后逐渐被 WebClient 取代。
- WebClient:Spring WebFlux 提供的非阻塞式 HTTP 客户端,支持响应式编程。
- HttpClient:Java 11 引入的标准 HTTP 客户端,支持同步和异步请求。
本文将重点介绍 WebClient 和 HttpClient,因为它们是现代 Spring Boot 应用中最常用的工具。
2. 使用 WebClient 发送 HTTP 请求
WebClient 是 Spring WebFlux 提供的非阻塞式 HTTP 客户端,适用于响应式编程。它比 RestTemplate 更加灵活和高效,尤其是在处理大量并发请求时。
2.1 引入依赖
首先,确保你的 pom.xml 中包含了 spring-boot-starter-webflux 依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
2.2 创建 WebClient 实例
你可以通过 WebClient.builder() 创建一个 WebClient 实例:
import org.springframework.web.reactive.function.client.WebClient;public class WebClientExample {private final WebClient webClient;public WebClientExample() {this.webClient = WebClient.builder().baseUrl("https://jsonplaceholder.typicode.com").build();}public void fetchData() {webClient.get().uri("/posts/1").retrieve().bodyToMono(String.class).subscribe(response -> System.out.println("Response: " + response));}public static void main(String[] args) {WebClientExample example = new WebClientExample();example.fetchData();}
}
在这个示例中,我们创建了一个 WebClient 实例,并使用它发送一个 GET 请求到 https://jsonplaceholder.typicode.com/posts/1。retrieve() 方法用于获取响应,bodyToMono(String.class) 将响应体转换为 Mono<String>,最后通过 subscribe() 方法处理响应。
2.3 发送 POST 请求
发送 POST 请求也非常简单。以下是一个发送 JSON 数据的示例:
public void postData() {String jsonBody = "{\"title\": \"foo\", \"body\": \"bar\", \"userId\": 1}";webClient.post().uri("/posts").header("Content-Type", "application/json").bodyValue(jsonBody).retrieve().bodyToMono(String.class).subscribe(response -> System.out.println("Response: " + response));
}
在这个示例中,我们发送了一个包含 JSON 数据的 POST 请求,并打印了响应。
3. 使用 HttpClient 发送 HTTP 请求
HttpClient 是 Java 11 引入的标准 HTTP 客户端,支持同步和异步请求。它比 WebClient 更加轻量级,适合不需要响应式编程的场景。
3.1 创建 HttpClient 实例
你可以通过 HttpClient.newBuilder() 创建一个 HttpClient 实例:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;public class HttpClientExample {private final HttpClient httpClient;public HttpClientExample() {this.httpClient = HttpClient.newHttpClient();}public void fetchData() throws Exception {HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://jsonplaceholder.typicode.com/posts/1")).GET().build();HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());System.out.println("Response: " + response.body());}public static void main(String[] args) throws Exception {HttpClientExample example = new HttpClientExample();example.fetchData();}
}
在这个示例中,我们创建了一个 HttpClient 实例,并使用它发送一个 GET 请求。HttpRequest.newBuilder() 用于构建请求,httpClient.send() 用于发送请求并获取响应。
3.2 发送 POST 请求
发送 POST 请求的示例如下:
public void postData() throws Exception {String jsonBody = "{\"title\": \"foo\", \"body\": \"bar\", \"userId\": 1}";HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://jsonplaceholder.typicode.com/posts")).header("Content-Type", "application/json").POST(HttpRequest.BodyPublishers.ofString(jsonBody)).build();HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());System.out.println("Response: " + response.body());
}
在这个示例中,我们发送了一个包含 JSON 数据的 POST 请求,并打印了响应。
4. 总结
在 Spring Boot 3 中,发送 HTTP 请求的方式更加多样化和灵活。WebClient 是响应式编程的首选工具,而 HttpClient 则适合传统的同步和异步请求。根据你的项目需求选择合适的工具,可以大大提高开发效率和性能。
希望本文能帮助你顺利升级到 Spring Boot 3,并在项目中高效地发送 HTTP 请求。如果你有任何问题或建议,欢迎在评论区留言讨论。
参考文档:
- Spring Boot 3 官方文档
- Java 11 HttpClient 文档
- Spring WebFlux 文档
相关文章:
升级 SpringBoot3 全项目讲解 — Spring Boot 3 中如何发Http请求?
随着 Spring Boot 3 的发布,许多开发者开始考虑将他们的项目升级到这个新版本。Spring Boot 3 带来了许多新特性和改进,尤其是在 HTTP 请求处理方面。本文将详细介绍如何在 Spring Boot 3 中发送 HTTP 请求,并通过代码示例帮助你快速上手。 …...
分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现
分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现 目录 分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现MFO-LSSVM飞蛾扑火算法优化最小二…...
MyBatis Plus核心功能
一、条件构造器 1.为什么要学? 用于方便地构建SQL查询条件 2.如何使用? 3.实战案例 例:查询出名字中带o的,存款大于等于1000元的人的id,username,info,balance字段 数据库如图: 示例: Test void testL…...
nginx ngx_http_module(10) 指令详解
nginx ngx_http_module(10) 指令详解 nginx 模块目录 nginx 全指令目录 一、目录 1.1 模块简介 ngx_http_v2_module:HTTP/2支持模块,允许Nginx通过HTTP/2协议与客户端进行通信。HTTP/2带来了许多性能优化,如多路复用、头部压缩和服务器推…...
【ENSP】链路聚合的两种模式
【ENSP】链路聚合的两种模式 1、背景介绍2、链路聚合的使用场景3、配置过程1、手工模式Eth-Trunk配置2、静态LACP模式Eth-Trunk 4、总结 1、背景介绍 随着网络规模的不断扩大,人们对骨干链路的带宽吞吐量和可靠性提出了越来越高的要求。在传统方案中,为…...
Windows环境安装部署minimind步骤
Windows环境安装部署minimind步骤 必要的软件环境 git git,可下载安装版,本机中下载绿色版,解压到本地目录下(如:c:\soft\git.win64),可将此路径添加到PATH环境变量中,供其他程序…...
让大模型帮我设计crnn网络及可运行demo,gpt4o豆包qwendeepseek-r1
prompt 使用 crnn 提取图像特征,给出图像好坏的二分类结果,写清楚代码备注,注释清楚向量维度大小,并给出一个可运行的 demo1、GPT-4o 以下是一个使用 CRNN(Convolutional Recurrent Neural Network)提取图…...
代码随想录-- 第一天图论 --- 岛屿的数量
99 统计岛屿的数量 c 99. 岛屿数量 #include <iostream> #include <vector> #include <queue>using namespace std;struct MGraph {int numVertices, numEdges;vector<vector<int>> Edge; };int dir[4][2] {{1, 0}, {0, 1}, {-1, 0}, {0, -1}…...
Mybatis MyBatis框架的缓存 一级缓存
1. 缓存的概念 缓存的概念 在内存中临时存储数据,速度快,可以减少数据库的访问次数。经常需要查询,不经常修改的数据,不是特别重要的数据都适合于存储到缓存中。 2.Mybatis缓存 mybatis包含了一个非常强大的查询缓存特性&#…...
Weboffice在线Word权限控制:限制编辑,只读、修订、禁止复制等
在现代企业办公中,文档编辑是一项常见且重要的任务。尤其是在线办公环境中,员工需要在网页中打开和编辑文档,但如何确保这些文档只能进行预览而无法被编辑或复制,成为许多企业面临的一个痛点。尤其是在处理涉密文档时,…...
RT-Thread+STM32L475VET6实现呼吸灯
文章目录 前言一、板载资源资源说明二、具体步骤1.新建rt_thread项目2. 打开PWM设备驱动3. 在Stm32CubeMX配置定时器3.1打开Stm32CubeMX3.2 使用外部高速时钟,并修改时钟树3.3打开定时器1,并配置通道一为PWM输出模式(定时器根据自己需求调整)3.4 打开串口…...
【Web前端开发精品课 HTML CSS JavaScript基础教程】第二十四章课后题答案
文章目录 问题1:问题2:问题3: 问题1: 在HTML中嵌入JavaScript,应该使用的标签是( )。 选项: A. <style></style> B. <script></script> C. <js><…...
记录 pycharm 无法识别提示导入已有的模块解决方案 No module named ‘xxx‘
在windows下,使用pycharm开发项目,每个项目都有自己独立的虚拟环境,有时候就会出现,在该项目中明明已经安装了某个模块,但是在写代码的时候就是导入不了,无法识别导入,在运行的时候却又是正常的…...
网工项目实践2.6 广域网需求分析及方案制定
本专栏持续更新,整一个专栏为一个大型复杂网络工程项目。阅读本文章之前务必先看《本专栏必读》。 全网拓扑展示 一.广域网互联方式 1.专线 优点 稳定 独享。绝对安全。可靠性高,带宽高,完全取决于终端接口。 缺点: 费用高。建设时间长。难…...
【架构】分层架构 (Layered Architecture)
一、分层模型基础理论 模型是一种常见的软件设计架构,它将软件系统按照功能划分为不同的层次,每个层次都有特定的职责和功能…...
玩客云 IP查找
1.玩客云使用静态IP在不同网段路由器下不能使用,动态不好找IP地址 1.1使用python3 实现自动获取发送 import requests import os import socket# 从环境变量获取 PushPlus 的 token 和群组编码 PUSH_PLUS_TOKEN os.getenv("PUSH_PLUS_TOKEN") PUSH_PLU…...
Android - Handler使用post之后,Runnable没有执行
问题:子线程创建的Handler。如果 post 之后,在Handler.removeCallbacks(run)移除了,下次再使用Handler.postDelayed(Runnable)接口或者使用post时,Runnable是没有执行。导致没有收到消息。 解决办法:只有主线程创建的…...
MyBatis-Plus之通用枚举
MyBatis-Plus之通用枚举 前言 MyBatis-Plus中提供了通用枚举,简单来说就是将数据库中的某一字段的代替的含义转换成真实的含义将数据展示给用户,用户在存储时也会将真实值转换成代替的数字存入到数据库中。举个例子:用户性别在数据库中存储…...
基于Spring Boot的图书管理系统设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
如何在 VS Code 中快速使用 Copilot 来辅助开发
在日常开发中,编写代码往往是最耗时的环节之一。而 GitHub Copilot,作为一款 AI 编码助手,可以帮助开发者 自动补全代码、生成代码片段,甚至直接编写完整的函数,大幅提升编码效率。那么,如何在 VS Code 中快…...
终极指南:如何用TensorFlow-Examples实现基于双向RNN的命名实体识别
终极指南:如何用TensorFlow-Examples实现基于双向RNN的命名实体识别 【免费下载链接】TensorFlow-Examples TensorFlow Tutorial and Examples for Beginners (support TF v1 & v2) 项目地址: https://gitcode.com/gh_mirrors/te/TensorFlow-Examples Te…...
Akagi智能麻将助手:你的私人AI麻将教练,快速提升牌技的终极方案
Akagi智能麻将助手:你的私人AI麻将教练,快速提升牌技的终极方案 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將,能夠使用自定義的AI模型實時分析對局並給出建議,內建Mortal AI作為示例。 Supports Majsoul, Tenhou…...
GModPatchTool终极指南:三步解决Garry‘s Mod浏览器与启动故障
GModPatchTool终极指南:三步解决Garrys Mod浏览器与启动故障 【免费下载链接】GModPatchTool 🇬🩹🛠 Patches for Garrys Mod. Updates/Improves CEF and Fixes common launch/performance issues (esp. on Linux/Proton/macOS). …...
别再傻傻分不清!一文搞懂激光器里那些镜片:反射镜、透镜、分束镜到底怎么选?
激光器光学镜片选型实战指南:从反射镜到分束镜的精准匹配 在激光器设计与光学系统搭建中,镜片选型往往成为工程师最易踩坑的环节。我曾亲眼见证一个价值百万的激光项目因选错反射镜镀膜类型,导致系统效率骤降30%。光学镜片不是简单的"透…...
决策树处理非结构化数据的3大策略与实战应用
1. 决策树:超越表格数据的全能选手第一次接触决策树时,我和大多数人一样,认为它只能处理规整的Excel表格数据。直到在一次客户投诉分析项目中,我不得不处理混杂着工单文本、时间序列日志和结构化数据的复杂数据集,才真…...
告别实体键盘:用Onboard和XVKBD在树莓派上打造你的专属触摸输入方案
树莓派触控输入革命:Onboard与XVKBD高阶定制指南 在移动计算设备日益普及的今天,实体键盘逐渐成为限制设备便携性的最后一道障碍。对于树莓派爱好者而言,无论是打造一体式便携终端、工业控制面板还是无障碍辅助设备,一个高度定制…...
别再傻傻分不清!AT24C32到AT24C512大容量EEPROM驱动,一篇讲透地址、页写和跨页处理
大容量EEPROM实战指南:从AT24C32到AT24C512的深度解析 第一次尝试将项目中的24C02换成24C256时,我遭遇了数据错乱的噩梦——明明写入的是配置参数,读出来却变成了乱码。经过三天调试才发现,问题出在地址计算上:小容量E…...
P5758题解
我的第一个黑题一、题目描述([题目传送门](https://www.luogu.com.cn/problem/P5758)) 1.题目大意 古梅文明有13 个符号a-m,一一对应现代的0到9、和*和这 13 个字符。给定N个古梅文等式,保证所有等式合法(符合十…...
重新定义轻量级音频处理:FlicFlac便携式音频转换解决方案深度解析
重新定义轻量级音频处理:FlicFlac便携式音频转换解决方案深度解析 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac 在当今数字音频处理领域&a…...
别再只用map了!Java Stream里mapToInt()的3个实战场景与性能对比
别再只用map了!Java Stream里mapToInt()的3个实战场景与性能对比 如果你还在用map()处理所有Java Stream转换操作,可能已经错过了性能优化的关键技巧。mapToInt()作为专门处理原始类型int的流操作,在特定场景下能带来显著的效率提升。让我们通…...
