@RequestParam 是 Spring MVC 中用于绑定 HTTP 请求参数到控制器方法参数的注解,常用于处理 GET/POST 请求中的查询参数(Query Parameters)或表单数据(Form Data)
来自deepseek
@RequestParam 是 Spring MVC 中用于绑定 HTTP 请求参数到控制器方法参数的注解,常用于处理 GET/POST 请求中的查询参数(Query Parameters)或表单数据(Form Data)。以下是它的核心用法和常见场景: 一、基本用法 1. 绑定单个参数 java 复制 @GetMapping("/user") public String getUser(@RequestParam("name") String username) { return "User: " + username; } 请求示例:/user?name=John 作用:将 URL 中的 name 参数值绑定到方法参数 username。 2. 省略参数名(需编译时启用参数保留) java 复制 @GetMapping("/user") public String getUser(@RequestParam String name) { return "User: " + name; } 请求示例:/user?name=John 说明:若参数名与方法参数名一致,可省略 @RequestParam 中的名称。 二、参数细节配置 1. 设置默认值 java 复制 @GetMapping("/user") public String getUser( @RequestParam(name = "name", defaultValue = "Guest") String username ) { return "User: " + username; } 请求示例:/user → 返回 User: Guest。 2. 设置是否必传 比传为required = "true" java 复制 @GetMapping("/user") public String getUser( @RequestParam(name = "name", required = false) String username ) { return "User: " + (username != null ? username : "Anonymous"); } 说明:required = false 表示允许参数不存在(默认为 true,缺失会抛出异常)。 3. 绑定多个参数 java 复制 @GetMapping("/user") public String getUser( @RequestParam String name, @RequestParam int age ) { return "User: " + name + ", Age: " + age; } 请求示例:/user?name=John&age=30。 4. 绑定到 Map 或对象 java 复制 // 绑定到 Map @GetMapping("/user") public String getUser(@RequestParam Map<String, String> params) { return "Params: " + params.toString(); } // 绑定到自定义对象(需要匹配字段名) public class UserFilter { private String name; private int age; // getter/setter } @GetMapping("/user") public String getUser(UserFilter filter) { return "Filter: " + filter.getName() + ", Age: " + filter.getAge(); } 三、常见问题与解决 1. 参数类型不匹配 场景:请求参数类型与方法参数类型不一致(如期望 int 但传入字符串)。 结果:Spring 抛出 TypeMismatchException,默认返回 HTTP 400 错误。 解决:使用全局异常处理或自定义转换器。 2. 处理多值参数 java 复制 @GetMapping("/tags") public String getTags(@RequestParam List<String> tags) { return "Tags: " + tags; } 请求示例:/tags?tags=Java&tags=Spring → 绑定为 ["Java", "Spring"]。 3. 与 @PathVariable 的区别 特性 @RequestParam @PathVariable 数据来源 URL 查询参数(如 ?key=value) URL 路径中的占位符(如 /user/{id}) 是否必传 默认必传(可通过 required 配置) 必传 多值绑定 支持(如 List<String>) 仅支持单个值 四、最佳实践 明确参数必要性:尽量显式设置 required 和 defaultValue,避免因参数缺失导致异常。 优先使用对象绑定:当参数较多时,封装到自定义对象中提高可维护性。 统一命名规范:保持 URL 参数名与代码变量名一致,减少混淆。 代码示例 java 复制 @GetMapping("/search") public String search( @RequestParam(name = "q", required = false, defaultValue = "") String keyword, @RequestParam(name = "page", defaultValue = "1") int pageNumber, @RequestParam(name = "size", defaultValue = "10") int pageSize ) { return "Searching for '" + keyword + "', Page: " + pageNumber + ", Size: " + pageSize; } 如果有具体场景或问题(如处理复杂嵌套参数),可以进一步讨论! 🚀
每天多努力一点,你将会变得更好。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!