当前位置: 首页 > article >正文

Springboot中Controller接收参数的方式

  在Spring Boot中,@Controller@RestController可以通过多种方式接收客户端传递的参数,主要包括以下几种常见方式:


1. 接收路径参数(@PathVariable

从URL路径中提取参数,适用于RESTful风格的API。

示例

@RestController
@RequestMapping("/user")
public class UserController {// 示例URL: /user/123@GetMapping("/{id}")public String getUserById(@PathVariable Long id) {return "User ID: " + id;}// 多个路径变量@GetMapping("/{name}/{age}")public String getUserInfo(@PathVariable String name,@PathVariable int age) {return "Name: " + name + ", Age: " + age;}
}

2. 接收查询参数(@RequestParam

从URL的?key=value格式中获取参数,适用于GET请求。

示例

@RestController
@RequestMapping("/search")
public class SearchController {// 示例URL: /search?keyword=spring@GetMappingpublic String search(@RequestParam String keyword) {return "Searching for: " + keyword;}// 可选参数(默认值)@GetMapping("/optional")public String searchOptional(@RequestParam(required = false, defaultValue = "default") String keyword) {return "Keyword: " + keyword;}// 接收多个参数@GetMapping("/multi")public String multiParams(@RequestParam String name,@RequestParam int age) {return "Name: " + name + ", Age: " + age;}
}

3. 接收表单数据(@ModelAttribute

适用于HTML表单提交(POST请求),自动绑定到Java对象。

示例

@RestController
@RequestMapping("/form")
public class FormController {// 接收表单数据并绑定到User对象@PostMapping("/submit")public String submitForm(@ModelAttribute User user) {return "Submitted: " + user.getName() + ", " + user.getAge();}
}// User.java
public class User {private String name;private int age;// getters & setters
}

4. 接收JSON请求体(@RequestBody

适用于POST/PUT请求,接收JSON格式数据并自动映射到Java对象。

示例

@RestController
@RequestMapping("/api")
public class ApiController {// 接收JSON数据并映射到User对象@PostMapping("/create")public String createUser(@RequestBody User user) {return "Created: " + user.getName() + ", " + user.getAge();}
}

请求示例(POST /api/create

{"name": "Alice","age": 25
}

5. 接收HTTP请求头(@RequestHeader

获取HTTP请求头信息,如AuthorizationContent-Type等。

示例

@RestController
@RequestMapping("/header")
public class HeaderController {@GetMapping("/info")public String getHeader(@RequestHeader("User-Agent") String userAgent) {return "User-Agent: " + userAgent;}
}

6. 接收Cookie(@CookieValue

获取客户端发送的Cookie值。

示例

@RestController
@RequestMapping("/cookie")
public class CookieController {@GetMapping("/get")public String getCookie(@CookieValue("JSESSIONID") String sessionId) {return "Session ID: " + sessionId;}
}

7. 接收文件上传(MultipartFile

适用于文件上传(如<input type="file">)。

示例

@RestController
@RequestMapping("/upload")
public class UploadController {@PostMapping("/file")public String uploadFile(@RequestParam("file") MultipartFile file) {return "File uploaded: " + file.getOriginalFilename() + ", Size: " + file.getSize();}
}

总结

方式适用场景注解示例
路径参数RESTful API(如/user/{id}@PathVariable/user/123id=123
查询参数GET请求(?key=value@RequestParam/search?q=spring
表单数据HTML表单提交(POST)@ModelAttribute<form>User对象
JSON请求体POST/PUT请求(JSON数据)@RequestBody{"name": "Alice"}
HTTP请求头获取请求头信息@RequestHeaderAuthorization: Bearer xxx
Cookie获取Cookie值@CookieValueJSESSIONID=xxx
文件上传文件上传(<input type="file">MultipartFile上传图片/文档

最佳实践

  • RESTful API:优先使用 @PathVariable + @RequestBody
  • 表单提交:使用 @ModelAttribute@RequestParam
  • 文件上传:使用 MultipartFile
  • 复杂参数:使用 @RequestBody 接收JSON数据。

掌握这些方式后,可以灵活处理各种HTTP请求参数! 🚀

http://www.lryc.cn/news/2398269.html

相关文章:

  • 从一堆数字里长出一棵树:中序 + 后序构建二叉树的递归密码
  • Unity UI 性能优化终极指南 — Image篇
  • Nginx + Tomcat 负载均衡、动静分离群集
  • 【maker-pdf 文档文字识别(包含ocr),安装使用完整教程】
  • c++ algorithm
  • 《前端面试题:BFC(块级格式化上下文)》
  • HertzBeat的告警规则如何配置?
  • 安全-JAVA开发-第一天
  • 6月2日上午思维训练题解
  • 高考数学易错考点01 | 临阵磨枪
  • 【CF】Day69——⭐Codeforces Round 897 (Div. 2) D (图论 | 思维 | DFS | 环)
  • MySQL中的字符串分割函数
  • 前端八股之Vue
  • Matlab数值计算
  • 谷歌地图高清卫星地图2026中文版下载|谷歌地图3D卫星高清版 V7.3.6.9796 最新免费版下载 - 前端工具导航
  • 条形进度条
  • 悟饭游戏厅iOS版疑似流出:未测试版
  • 95. Java 数字和字符串 - 操作字符串的其他方法
  • IBM DB2分布式数据库架构
  • 初始化已有项目仓库,推送远程(Git)
  • Android Studio 向模拟器手机添加照片、视频、音乐
  • 数据结构-算法学习C++(入门)
  • 访谈 | 吴恩达全景解读 AI Agents 发展现状:多智能体、工具生态、评估体系、语音栈、Vibe Coding 及创业建议一文尽览
  • 连接关键点:使用 ES|QL 联接实现更丰富的可观测性洞察
  • Tiktok App 登录账号、密码、验证码 XOR 加密算法
  • Flask + Celery 应用
  • 奥威BI+AI数据分析:企业数智化转型的加速器
  • python打卡day43
  • MySQL 如何判断某个表中是否存在某个字段
  • Linux --进程优先级