Spring Boot接收参数的19种方式

作者:a***5606日期:2025/11/22

Spring Boot是一个强大的框架,允许开发人员通过多种方式接收和处理参数。无论是HTTP请求参数、路径变量,还是请求体中的数据,Spring Boot都能提供灵活的处理方式。本文将介绍19种不同的方式来接收参数。

1. 查询参数(Query Parameters)

使用@RequestParam注解接收查询参数。适用于GET请求。

1@GetMapping("/greet")
2public String greet(@RequestParam String name) {
3    return "Hello, " + name;
4}
5

2. 路径变量(Path Variables)

使用@PathVariable注解从URL中提取参数。

1@GetMapping("/user/{id}")
2public String getUser(@PathVariable String id) {
3    return "User ID: " + id;
4}
5

3. 请求体(Request Body)

使用@RequestBody注解将请求体中的JSON数据绑定到Java对象。

1@PostMapping("/user")
2public String createUser(@RequestBody User user) {
3    return "Created user: " + user.getName();
4}
5

4. 表单数据(Form Data)

使用@ModelAttribute注解接收表单数据。

1@PostMapping("/submit")
2public String submitForm(@ModelAttribute FormData formData) {
3    return "Submitted: " + formData.getField();
4}
5

5. 文件上传(File Upload)

使用@RequestParam注解接收上传的文件。

1@PostMapping("/upload")
2public String handleFileUpload(@RequestParam MultipartFile file) {
3    return "Uploaded file: " + file.getOriginalFilename();
4}
5

6. Cookie

使用@CookieValue注解获取Cookie值。

1@GetMapping("/welcome")
2public String welcome(@CookieValue(value = "username", defaultValue = "Guest") String username) {
3    return "Welcome, " + username;
4}
5

7. HTTP头(HTTP Headers)

使用@RequestHeader注解接收请求头信息。

1@GetMapping("/header")
2public String getHeader(@RequestHeader("User-Agent") String userAgent) {
3    return "User-Agent: " + userAgent;
4}
5

8. 请求参数的默认值

可以为@RequestParam提供默认值。

1@GetMapping("/greet")
2public String greet(@RequestParam(defaultValue = "Guest") String name) {
3    return "Hello, " + name;
4}
5

9. 处理多个参数

可以接收多个参数并进行处理。

1@GetMapping("/add")
2public int add(@RequestParam int a, @RequestParam int b) {
3    return a + b;
4}
5

10. 使用集合

可以接收列表或数组作为参数。

1@GetMapping("/items")
2public String getItems(@RequestParam List<String> ids) {
3    return "Items: " + String.join(", ", ids);
4}
5

11. 使用Map接收参数

接收一组键值对。

1@GetMapping("/params")
2public String getParams(@RequestParam Map<String, String> params) {
3    return "Parameters: " + params.toString();
4}
5

12. 通过自定义的参数解析器

可以通过实现HandlerMethodArgumentResolver来自定义参数解析逻辑。

13. 通过拦截器获取参数

可以使用拦截器在请求处理前后获取和处理参数。

14. 使用Spring Security的Authentication对象

可以直接获取当前用户的认证信息。

1@GetMapping("/user-info")
2public String getUserInfo(Authentication authentication) {
3    return "Logged in user: " + authentication.getName();
4}
5

15. 请求体中的表单数据

对于PUT或POST请求,可以将表单数据作为请求体接收。

1@PostMapping("/form")
2public String handleForm(@RequestBody FormData formData) {
3    return "Received: " + formData.getField();
4}
5

16. 通过Request对象获取参数

直接使用HttpServletRequest对象。

1@GetMapping("/request")
2public String getRequest(HttpServletRequest request) {
3    String param = request.getParameter("paramName");
4    return "Parameter: " + param;
5}
6

17. 使用Spring Boot的Validation

结合@Valid进行参数校验。

1@PostMapping("/validate")
2public String validateUser(@Valid @RequestBody User user) {
3    return "Valid user: " + user.getName();
4}
5

18. 使用接口获取参数

可以使用接口定义请求参数。

1public interface UserRequest {
2    String getName();
3}
4
5@PostMapping("/user")
6public String createUser(@RequestBody UserRequest userRequest) {
7    return "Created user: " + userRequest.getName();
8}
9

19. 结合Spring Data JPA获取参数

在使用Spring Data JPA时,可以直接通过方法参数获取查询参数。

1@GetMapping("/users")
2public List<User> findUsers(@RequestParam String name) {
3    return userRepository.findByName(name);
4}
5

结论

Spring Boot提供了丰富的方式来接收和处理参数,开发人员可以根据不同的需求选择最合适的方式。这使得应用程序能够灵活地处理来自客户端的各种输入,提供更好的用户体验。希望本文能帮助您更好地理解和使用Spring Boot的参数接收功能。


Spring Boot接收参数的19种方式》 是转载文章,点击查看原文


相关推荐


为什么 VARCHAR(1000) 存不了 1000 个汉字? —— 详解主流数据库“字段长度”的底层差异
G探险者2025/11/20

大家好,我是G探险者! 在开发过程中,我们经常遇到这样的灵异现象:明明数据库字段设置为 VARCHAR(1000),前端校验也限制了 1000 个字,但用户提交时后端却报错:“Data too long”。 这并非因为数据库坏了,而是因为不同的数据库对**“长度(Length)”**的定义完全不同。有的按“人眼看到的字”算,有的按“计算机存储的字节”算。 本文将横向对比主流数据库(MySQL, Oracle, SQL Server, PostgreSQL, 达梦)的字段长度表现,并给出避坑建议。


django测试缓存命令的解读
一路生花工作室2025/11/19

命令如下: python manage.py test_cache_performance --clear-cache --iterations 5 是 Django 自定义管理命令(custom management command) 的一种调用方式,用于测试缓存性能。下面逐部分解释其含义: 🔹 1. python manage.py Django 项目的标准命令行入口。所有 Django 内置或自定义的管理命令都通过它执行。 🔹 2. test_cache_performa


深入浅出蓝桥杯:算法基础概念与实战应用(三)搜索
铭哥的编程日记2025/11/18

算法基础概念与实战应用(三)搜索 文章目录 算法基础概念与实战应用(三)搜索1.1 深度优先搜索 - DFS1.1.1 枚举⼦集1.1.2 组合型枚举1.1.3 枚举排列1.1.4 全排列问题 1.2 DFS1.2.1 选数1.2.2 ⻜机降落 整体源代码总结 1.1 深度优先搜索 - DFS 1.1.1 枚举⼦集 代码如下(示例): #include <iostream> using namespace std; int n;


Snapchat 开源全新跨平台框架 Valdi ,一起来搞懂它究竟有什么特别之处
恋猫de小郭2025/11/17

最近看到好几篇在推 Valdi 的文章,大致意思就是 「RN/Flutter 的地位将受到威胁」,「Valdi 将成为全新的跨平台流行架构」云云,这不仅就让我好奇这个新框架有什么魔力,还能在 2025 的跨平台领域玩出新花样? 首先,Valdi 是由 Snapchat 开源的跨平台框架,其核心技术已在 Snap 的生产应用中验证长达 8 年,号称在不牺牲开发速度的前提下提供原生性能 ,那它是怎么做到的? 简单来说,Valdi 是一个 “用 TypeScript(TSX)写 UI,然后编


Java游戏高级编程 | 深入探索游戏引擎与优化技巧
mfnart_2822025/11/15

在线编译C语言|探索在线编译器的优势与应用在线编译C语言是一项非常实用的技术,它使得程序员能够在没有本地开发环境的情况下直接在浏览器中编写、调试和执行C语言代码。在线编译器通过提供一个即时反馈的开发环境,大大提高了学习和工作的效率,尤其对于初学者而言,更是降低了编程的门槛。相比传统的桌面编译器,在线编译器的优势在于其便捷性和灵活性。用户不需要安装任何开发工具,只需在浏览器中输入代码,点击“编译”按钮,就可以立即看到运行结果。这种即时性大大减少了开发中的等待时间,尤其是在调试阶段,可以快速查看修改


前端图形引擎架构设计:双引擎架构设计
猪猪拆迁队2025/11/14

ECS渲染引擎架构文档 写在前面 之前写过一篇ECS文章,为什么还要再写一个,本质上因为之前的文档,截止到目前来说,变化巨大,底层已经改了很多很多,所以有必要把一些内容拎出来单独去说。 由于字体文件较大,加载时间会比较久😞 另外如果有性能问题,我会及时修复,引擎改造时间太仓促,只要不是内存泄漏,暂时没去处理。 还有很多东西要做。 体验地址:baiyuze.github.io/design/#/ca… 项目概览 Duck-Core 是一个基于 ECS(Entity-Component-Sy


GPT-5.1 凌晨突袭,奥特曼听劝!全网呼唤的人味回来了
新智元2025/11/13

「【新智元导读】今天,OpenAI GPT-5.1「全家桶」突然登场,Instant 和 Thinking 王炸组合同步上线。这一次,模型情商智商双核升级,不仅更聪明,而且聊天更有人味了。」 没有直播,OpenAI 一早放大招,让所有人猝不及防。 就在刚刚,GPT-5.1 正式发布,GPT-5 系列重大升级版登场! 一共有三个版本,目前已经上线了前两个: · GPT-5.1 Instant :最常用的模型,语气更亲切、更智能,更善于遵循指令。 · GPT-5.1 Thinking :先进的推理模


李飞飞最新长文:AI的下一个十年——构建真正具备空间智能的机器
机器之心2025/11/11

就在昨晚,关于其投身的空间智能,斯坦福大学教授李飞飞发表了一篇长篇博客《From Words to Worlds: Spatial Intelligence is AI’s Next Frontier》。 在文中,李飞飞详细解读了「空间智能究竟是什么?它为什么重要?我们如何构建它?我们又如何使用它?」她同时阐述了真正的空间智能世界模型必须实现的核心框架:构建具有故事讲述者想象力的 AI、具备第一响应者流畅性的 AI 以及以科学精确性进行空间推理。 以下为全文翻译: 1950 年,当计算机还只


调用服务出现网络错误的问题排查与解决
360_go_php2025/11/10

在分布式系统和微服务架构中,服务之间的调用是常见的操作。然而,有时在调用某个外部服务时,可能会遇到网络错误或连接失败的情况。这类问题可能与网络环境、域名解析、DNS 配置等因素相关,给服务的稳定性和可用性带来影响。​编辑 本文将介绍如何排查和解决调用服务时出现网络错误的问题,最终通过 ping 命令确认错误接口的域名,并通过本地 hosts 文件检查和修改解析,解决了因 DNS 配置问题引起的服务调用失败。 1. 问题背景​编辑 在调用某个外部服务时,应用程序报错,提示无法访问目标服务,或者出现


一份实用的Vue3技术栈代码评审指南
至简简2025/11/8

CSS 优先使用 **scoped**  防止样式污染全局,每个组件样式必须局部化。 错误示例:无作用域 <style> .button { color: red; } </style>  不加 scoped 会影响全局所有 .button 正确示例:使用 scoped <style scoped> .button { color: red; } </style> 限制嵌套层级 ≤ 3 层 嵌套超过 3 层说明选择器设计有问题,建议拆分样式或使用 BEM。 错误示例:嵌套过深(5 层

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2025 聚合阅读