SpringBoot 三大参数注解详解:@RequestParam @RequestBody @PathVariable 区别及常用开发注解

张开发
2026/4/12 13:01:42 15 分钟阅读

分享文章

SpringBoot 三大参数注解详解:@RequestParam @RequestBody @PathVariable 区别及常用开发注解
本文是结合 Spring Boot 开发与面试高频考点整理的优质笔记针对RequestParam、RequestBody、PathVariable三个核心注解的区别做详细拆解同时补充 Spring Boot 开发中最常用的开发注解附代码示例、使用场景和面试考点适合开发积累、毕业设计答辩和面试复习。一、核心接收参数注解三大金刚这三个注解是 Spring Boot 中处理前端请求参数的基石也是面试和开发中必须掌握的内容核心区别在于参数获取位置、数据格式、适用场景。1.1 PathVariable获取 URL 路径中的参数核心作用从URL 路径模板中提取参数适用于获取单个资源 ID、路径层级参数是 RESTful 风格接口的核心注解。语法格式// 路径模板/user/{id} 中的 {id} 就是路径参数 GetMapping(/user/{id}) public User getUserById(PathVariable Integer id) { // 直接获取路径中的id值 return userService.getById(id); }关键特性参数绑定注解中 value 属性可指定路径参数名如PathVariable(userId) Integer id路径模板与注解名称需一致数据格式仅支持简单类型Integer、String、Long 等不能接收复杂对象请求方法支持 GET、POST 等所有请求方法主流用于 GET 请求使用场景获取单个资源详情如/order/1001获取 1001 号订单、路径层级查询如/category/phone/list。1.2 RequestParam获取 URL 查询参数 / 表单参数核心作用从URL? 后面的查询参数如/user?name张三age20或表单提交的参数中获取数据是处理简单查询条件、分页参数的核心注解。语法格式// 场景1获取URL查询参数 GetMapping(/user) public ListUser getUserByCondition( RequestParam String name, RequestParam(defaultValue 1) Integer pageNum ) { // 自动获取name和pageNum参数defaultValue指定默认值 return userService.getByCondition(name, pageNum); } // 场景2获取表单参数POST请求 PostMapping(/user/add) public String addUser(RequestParam String username, RequestParam String password) { userService.add(username, password); return success; }关键特性参数绑定支持 value 属性指定参数名如RequestParam(userName) String namerequired 属性指定是否必传默认 true必传时参数缺失会报错数据格式支持简单类型、简单类型数组如RequestParam String[] hobbies请求方法GET 请求主流、POST 请求均支持使用场景条件查询如多条件筛选用户、分页查询pageNum、pageSize、表单提交简单注册、登录。1.3 RequestBody获取请求体中的 JSON 参数核心作用将HTTP 请求体Body中的 JSON 格式数据绑定到 Java 对象中适用于传递复杂数据、新增 / 修改操作是前后端分离开发的核心注解。语法格式// 前端传JSON{username:张三,age:20,hobbies:[篮球,编程]} PostMapping(/user/add) public String addUser(RequestBody User user) { // 自动将JSON数据映射到User对象的属性中 userService.add(user); return success; } // 补充接收JSON数组 PostMapping(/user/batchAdd) public String batchAddUser(RequestBody ListUser userList) { userService.batchAdd(userList); return success; }关键特性参数绑定无 value 属性直接绑定请求体支持复杂对象、集合、嵌套对象数据格式仅支持JSON 格式请求头需携带Content-Type: application/json请求方法主流用于 POST、PUT 请求GET 请求不支持请求体使用场景新增用户 / 订单传复杂对象、修改数据全量 / 部分更新、批量操作传集合、前后端分离架构的核心数据交互。1.4 三大注解核心区别面试必背版表格注解参数获取位置数据格式请求方法主流是否支持复杂对象核心使用场景PathVariableURL 路径模板{参数}简单类型GET❌ 不支持获取单个资源 ID、RESTful 风格RequestParamURL? 查询参数 / 表单参数简单类型、简单数组GET/POST❌ 不支持条件查询、分页、简单表单提交RequestBodyHTTP 请求体BodyJSON 格式对象 / 集合POST/PUT✅ 支持复杂数据传递、新增 / 修改操作二、Spring Boot 常用开发注解补充除了上述三大核心接收参数注解Spring Boot 开发中还有多个高频注解按使用场景分类整理附核心作用和代码示例覆盖开发、面试、答辩全场景。2.1 控制器与请求映射核心注解表格注解核心作用代码示例RestController组合注解Controller ResponseBody标记控制器类返回 JSON / 字符串而非视图RestControllerpublic class UserController { ... }GetMapping标记 GET 请求方法简化 RequestMapping (method RequestMethod.GET)GetMapping(/user/{id})public User getUser(PathVariable Integer id)PostMapping标记 POST 请求方法简化 RequestMapping (method RequestMethod.POST)PostMapping(/user/add)public String addUser(RequestBody User user)PutMapping标记 PUT 请求方法用于更新操作全量更新PutMapping(/user/update)public String updateUser(RequestBody User user)DeleteMapping标记 DELETE 请求方法用于删除操作DeleteMapping(/user/{id})public String deleteUser(PathVariable Integer id)RequestMapping通用请求映射注解支持指定请求方法、路径、请求头灵活度最高RequestMapping(value /user, method RequestMethod.GET, headers token123)2.2 参数接收与数据绑定补充注解表格注解核心作用代码示例RequestHeader获取请求头中的参数如 token、Authorization、Content-Typepublic String getToken(RequestHeader(token) String token) { ... }CookieValue获取Cookie中的值如 JSESSIONID、sessionIdpublic String getCookie(CookieValue(JSESSIONID) String sid) { ... }ModelAttribute将表单 / URL 参数封装到Java 对象中适用于简单表单提交替代多个 RequestParamPostMapping(/user/add)public String addUser(ModelAttribute User user)RequestPart处理文件上传请求支持 MultipartFile 类型替代传统 RequestParamPostMapping(/upload)public String upload(RequestPart(file) MultipartFile file)PathVariableMap将所有路径参数封装为Map 集合适用于路径参数较多的场景GetMapping(/user/{id}/{name})public Map getPathParam(PathVariableMap MapString, String paramMap)2.3 服务层与业务逻辑注解表格注解核心作用代码示例Service标记服务层接口实现类Spring 会自动扫描并创建 Bean 实例Servicepublic class UserServiceImpl implements UserService { ... }Transactional标记事务管理可加在类或方法上实现事务的提交 / 回滚需开启事务管理Transactionalpublic void addUserAndOrder(User user, Order order) { ... }Autowired按类型自动注入依赖Spring 核心注入注解Autowiredprivate UserService userService;Resource按名称自动注入依赖JDK 注解默认按名称匹配无名称则按类型Resource(name userServiceImpl)private UserService userService;Qualifier配合 Autowired 使用指定注入的 Bean名称解决同接口多个实现类的冲突AutowiredQualifier(userServiceImpl)private UserService userService;2.4 数据持久层与数据库注解表格注解核心作用代码示例Mapper标记MyBatis 接口MyBatis 会自动生成接口实现类需配置扫描路径Mapperpublic interface UserMapper { ... }MapperScan在 Spring Boot 启动类上扫描Mapper 接口替代单个 Mapper 注解批量扫描SpringBootApplicationMapperScan(com.example.demo.mapper)public class DemoApplication { ... }Repository标记数据访问层DAO类Spring 会自动扫描并创建 Bean 实例捕获数据访问异常Repositorypublic interface UserDAO { ... }Insert / Update / Delete / SelectMyBatis 注解式开发直接在接口方法上编写 SQL无需 XML 文件Select(select * from user where id #{id})User getUserById(Integer id);2.5 配置与组件扫描注解表格注解核心作用代码示例SpringBootApplicationSpring Boot 启动类核心注解组合 Configuration、ComponentScan、EnableAutoConfigurationSpringBootApplicationpublic class DemoApplication { main() { ... } }Configuration标记配置类替代传统 XML 配置文件可通过 Bean 定义 BeanConfigurationpublic class AppConfig {Beanpublic UserService userService() { return new UserServiceImpl(); } }Bean标注在配置类的方法上将方法返回值注册为Spring Bean自定义 Bean 的创建逻辑Beanpublic DataSource dataSource() {return new DruidDataSource(); }ComponentScan指定 Spring 扫描组件类的路径Controller、Service、Component 等ComponentScan(basePackages com.example.demo)Value读取 ** 配置文件application.yml/properties** 中的属性值Value(${server.port})private String port;ConfigurationProperties批量读取配置文件属性绑定到实体类支持类型转换、校验ConfigurationProperties(prefix user)Componentpublic class UserConfig { private String name; private Integer age; }三、面试 / 答辩高频考点总结核心区别题面试常问 “RequestParam、RequestBody、PathVariable 的区别”需从参数位置、数据格式、使用场景三个维度回答结合代码示例更有说服力RESTful 风格题重点说明 PathVariable 在 RESTful 接口中的应用如/user/{id}以及 GET/POST/PUT/DELETE 注解的对应场景前后端分离题强调 RequestBody 是前后端分离开发的核心解释 JSON 数据与 Java 对象的映射原理事务管理题Transactional 注解的使用场景如多操作原子性、失效场景如非 public 方法、异常类型未指定注入冲突题Autowired 与 Resource 的区别Qualifier 解决同接口多实现类注入的问题。四、实战示例综合使用所有核心注解以下是一个完整的 Spring Boot 用户管理接口示例整合本文所有核心注解可直接作为毕业设计或项目开发的参考代码import com.example.demo.entity.User; import com.example.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.List; import java.util.Map; /** * 控制器类整合所有核心接收参数注解 */ RestController RequestMapping(/user) // 类级别的请求映射所有方法前缀为/user public class UserController { Autowired private UserService userService; /** * 1. 使用PathVariable获取路径参数 * 接口GET /user/1001 */ GetMapping(/{id}) public User getUserById(PathVariable Integer id) { return userService.getById(id); } /** * 2. 使用RequestParam获取查询参数 * 接口GET /user/list?name张三pageNum1pageSize10 */ GetMapping(/list) public ListUser getUserList( RequestParam(required false) String name, RequestParam(defaultValue 1) Integer pageNum, RequestParam(defaultValue 10) Integer pageSize ) { return userService.getPageList(name, pageNum, pageSize); } /** * 3. 使用RequestBody接收JSON参数 * 接口POST /user/add * 请求体{username:张三,age:20,hobbies:[篮球,编程]} */ PostMapping(/add) public String addUser(RequestBody User user) { userService.add(user); return 新增用户成功; } /** * 4. 使用RequestHeader获取请求头参数 * 接口GET /user/token * 请求头token: admin123456 */ GetMapping(/token) public String getToken(RequestHeader(token) String token) { return 获取到的token token; } /** * 5. 使用RequestPart实现文件上传 * 接口POST /user/upload * 表单参数file文件 */ PostMapping(/upload) public String uploadFile(RequestPart(file) MultipartFile file) { userService.uploadFile(file); return 文件上传成功; } /** * 6. 使用PathVariableMap获取所有路径参数 * 接口GET /user/map/1001/张三 */ GetMapping(/map/{id}/{name}) public MapString, String getPathParamMap(PathVariableMap MapString, String paramMap) { return paramMap; // 返回{id1001, name张三} } }Spring Web 里最常用、面试必问、实际开发必写的还有这几个按重要程度给你排好1.RequestHeader非常常用取请求头里的值比如 token、User-Agent、Content-Typepublic String test(RequestHeader(token) String token)2.CookieValue取Cookie里的值public String test(CookieValue(JSESSIONID) String sid)3.ModelAttribute接收表单对象不用一个个写 RequestPara和 RequestBody 区别ModelAttribute表单 / URL 参数封装RequestBodyJSON 封装4.RequestPart专门接收文件上传配合 MultipartFilepublic String upload(RequestPart(file) MultipartFile file)5.MatrixVariableURL 路径里的分号参数少用但算同类/user;id1;namezs总结本文从核心接收参数注解到Spring Boot 全场景常用注解做了系统性梳理覆盖开发、答辩、面试的核心需求。重点掌握三大核心接收参数注解的区别以及控制器、服务层、持久层的核心注解就能快速搭建规范的 Spring Boot 项目架构。​​​​​​​

更多文章