news 2026/4/23 16:54:08

SpringBoot 中处理接口传参时常用的注解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot 中处理接口传参时常用的注解

SpringBoot 接收前端参数的核心注解都基于 Spring MVC,主要解决不同位置参数(URL 路径、请求头、请求体、URL 参数等)的绑定问题,下面按使用场景分类说明:

1. 路径参数(URL 中 /{xxx} 形式):@PathVariable
  • 核心作用:绑定 URL 路径中的动态参数(如/user/123中的123)到方法参数。
  • 使用场景:RESTful 风格接口,获取资源 ID、分类标识等。
  • 核心用法
    @RestController @RequestMapping("/user") public class UserController { // 访问路径:/user/123 @GetMapping("/{id}") public String getUserById(@PathVariable Long id) { return "获取到用户ID:" + id; } // 多路径参数 + 指定参数名(参数名与路径变量名不一致时) @GetMapping("/{id}/order/{orderId}") public String getUserOrder( @PathVariable("id") Long userId, @PathVariable("orderId") Long orderId ) { return "用户ID:" + userId + ",订单ID:" + orderId; } }
  • 关键说明:默认要求路径变量名与方法参数名一致,不一致时需用@PathVariable("xxx")指定。
2. URL 请求参数(?key=value 形式):@RequestParam
  • 核心作用:绑定 URL 中?后的查询参数(如/user?name=张三)到方法参数。
  • 使用场景:分页、筛选、简单条件查询(如page=1&size=10)。
  • 核心用法
    @RestController @RequestMapping("/user") public class UserController { // 访问路径:/user/list?name=张三&age=20 @GetMapping("/list") public String getUserList( @RequestParam String name, // 必传参数 @RequestParam(required = false, defaultValue = "18") Integer age // 非必传+默认值 ) { return "姓名:" + name + ",年龄:" + age; } }
  • 关键属性
    • required:是否必传,默认true(不传会报错);
    • defaultValue:参数未传时的默认值(仅required=false时生效);
    • value:指定 URL 参数名(与方法参数名不一致时用)。
3. 请求体参数(JSON/XML):@RequestBody
  • 核心作用:绑定 HTTP 请求体(通常是 JSON 格式)到 Java 对象(POJO)。
  • 使用场景:POST/PUT 请求,传递复杂数据(如新增 / 修改用户信息)。
  • 核心用法
    // 1. 定义POJO(接收前端JSON) public class UserDTO { private String name; private Integer age; // 省略getter/setter } // 2. 控制器接收参数 @RestController @RequestMapping("/user") public class UserController { // 前端POST请求体:{"name":"张三","age":20} @PostMapping("/add") public String addUser(@RequestBody UserDTO userDTO) { return "新增用户:" + userDTO.getName() + ",年龄:" + userDTO.getAge(); } }
  • 关键说明
    • 仅支持 POST/PUT 等有请求体的请求(GET 请求无请求体,用会报错);
    • 前端需保证 Content-Type 为application/json,否则解析失败;
    • 可搭配@Valid/@Validated做参数校验(如@NotBlank(message = "姓名不能为空"))。
4. 请求头参数:@RequestHeader
  • 核心作用:绑定 HTTP 请求头中的参数(如 Token、Content-Type)。
  • 使用场景:获取令牌(Token)、语言标识(Accept-Language)等。
  • 核心用法
    @RestController @RequestMapping("/user") public class UserController { @GetMapping("/info") public String getUserInfo( @RequestHeader("token") String token, // 获取token请求头 @RequestHeader(value = "Accept-Language", required = false) String lang // 非必传 ) { return "Token:" + token + ",语言:" + (lang == null ? "zh-CN" : lang); } }
5. Cookie 参数:@CookieValue
  • 核心作用:绑定 HTTP Cookie 中的参数。
  • 使用场景:获取前端存储的 Cookie(如用户登录态)。
  • 核心用法
    @RestController @RequestMapping("/user") public class UserController { @GetMapping("/cookie") public String getCookie(@CookieValue("JSESSIONID") String sessionId) { return "SessionID:" + sessionId; } }
6. 无注解(自动绑定)
  • 核心作用:当参数是简单类型(String、Integer、Long 等)或 POJO 时,SpringBoot 会自动绑定 URL 参数 / 表单参数到方法参数。
  • 使用场景:简单表单提交、参数名与 POJO 字段名完全一致的场景。
  • 核心用法
    // 1. 简单类型自动绑定(访问路径:/user/simple?name=李四) @GetMapping("/simple") public String simpleParam(String name) { return "姓名:" + name; } // 2. POJO自动绑定(访问路径:/user/pojo?name=李四&age=22) @GetMapping("/pojo") public String pojoParam(UserDTO userDTO) { return "姓名:" + userDTO.getName() + ",年龄:" + userDTO.getAge(); }
  • 关键说明:仅适用于 URL 参数 / 表单参数(application/x-www-form-urlencoded),无法绑定 JSON 请求体。

总结

  1. @PathVariable:绑定 URL 路径中的动态参数(RESTful 接口核心);
  2. @RequestParam:绑定 URL 查询参数(?key=value),支持必传 / 默认值配置;
  3. @RequestBody:绑定 JSON 请求体到 POJO(POST/PUT 传递复杂数据);
  4. @RequestHeader/@CookieValue:分别绑定请求头、Cookie 中的参数;
  5. 无注解自动绑定:适用于简单 URL / 表单参数,无需额外注解。

核心原则:根据参数位置(路径、查询、请求体、请求头)选择对应注解,复杂数据用@RequestBody,简单筛选用@RequestParam,RESTful 资源标识用@PathVariable

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 8:21:12

亲测好用8个一键生成论文工具,研究生论文写作必备!

亲测好用8个一键生成论文工具,研究生论文写作必备! AI 工具助力论文写作,效率提升不再是梦想 在研究生阶段,论文写作是每位学生都无法回避的重要任务。无论是开题报告、文献综述,还是最终的毕业论文,都需要…

作者头像 李华
网站建设 2026/4/23 9:57:05

RAG入门

对提取的文本进行分块def chunk_text(text, n, overlap):"""Chunks the given text into segments of n characters with overlap.Args:text (str): 文本n (int): 块长度overlap (int): 重叠度Returns:List[str]: A list of text chunks."""chun…

作者头像 李华
网站建设 2026/4/23 9:55:23

从对象结构到锁机制:Java 对象锁与类锁深度解析

从对象结构到锁机制:Java 对象锁与类锁深度解析 Java 的并发控制中,synchronized 是最经典的内置锁机制。它基于 JVM 的对象结构实现,分为对象锁(实例锁)和类锁(静态锁)。下面从对象内存布局入…

作者头像 李华
网站建设 2026/4/23 13:17:20

实战复盘:如何用 HTML+JS+AI 打造一款“影迹”智能影视管理系统

在数字化时代,我们囤积了大量的影视资源链接(百度网盘、夸克网盘),但它们通常以杂乱的 TXT 文本形式存在。只有链接,没有海报;只有片名,没有评分。 为了解决这个痛点,我开发了**“影…

作者头像 李华
网站建设 2026/4/23 9:57:05

基于 SpringCloud 的作品投票系统vue3

目录项目技术支持可定制开发之功能亮点源### 技术栈选择功能模块设计关键实现细节性能与安全优化项目技术支持 后端语言框架支持: 1 java(SSM/springboot/Springcloud)-idea/eclipse 2.Nodejs(Express/koa)Vue.js -vscode 3.python(django/flask)–pycharm/vscode 4…

作者头像 李华
网站建设 2026/4/23 9:59:01

基于Spring Cloud技术的智慧云停车场服务管理系统vue3

目录智慧云停车场服务管理系统摘要技术架构核心功能模块系统优势项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作智慧云停车场服务管理系统摘要 基于Spring Cloud和Vue3的智慧云停车场服务管理系统旨在通过…

作者头像 李华