Spring MVC 中获取请求参数的多种方式
- 直接在方法参数中接收表单数据(适用于 GET 请求) 将表单字段名与控制器方法参数名保持一致,Spring 会自动绑定。仅限于 GET 请求。
@RequestMapping("/submitForm")
public String handleGet(String userName, String userPwd) {
System.out.println("用户名: " + userName);
System.out.println("密码: " + userPwd);
return "success";
}
URL 示例:/submitForm?userName=admin&userPwd=123456
- 使用 HttpServletRequest 获取参数(支持 GET 与 POST)
通过
HttpServletRequest对象手动提取参数,灵活性高。
@RequestMapping("/process")
public String handleRequest(HttpServletRequest request) {
String userName = request.getParameter("userName");
String userPwd = request.getParameter("userPwd");
System.out.println("用户输入: " + userName + ", " + userPwd);
return "result";
}
- 通过实体类封装请求数据(推荐方式) 创建一个与表单字段对应的 Java Bean,Spring 自动完成属性映射。
// UserRequest.java
public class UserRequest {
private String userName;
private String userPwd;
// getter 和 setter 省略
}
控制器中使用:
@RequestMapping("/saveUser")
public String saveUser(UserRequest userData) {
System.out.println("用户名: " + userData.getUserName());
System.out.println("密码: " + userData.getUserPwd());
return "redirect:/index";
}
- 利用 @PathVariable 从 URL 路径中提取变量 适用于 RESTful 风格的接口设计,路径中包含动态参数。
@RequestMapping(value = "/profile/{id}/{name}", method = RequestMethod.GET)
public String showProfile(@PathVariable("id") String userId, @PathVariable("name") String userName) {
System.out.println("用户ID: " + userId);
System.out.println("姓名: " + userName);
return "profile";
}
访问地址:/profile/101/john → userId=101, userName=john
- 使用 @ModelAttribute 绑定表单数据到对象 特别适合处理 POST 表单提交,可实现自动封装。
<form action="/submitData" method="post">
姓名:<input type="text" name="userName" /><br/>
密码:<input type="password" name="userPwd" /><br/>
<button type="submit">提交</button>
</form>
Java 控制器:
@PostMapping("/submitData")
public String processForm(@ModelAttribute("userData") UserRequest data) {
System.out.println("收到数据: " + data.getUserName() + ", " + data.getUserPwd());
return "confirm";
}
- 使用 @RequestParam 显式绑定请求参数 用于精确控制参数绑定行为,支持默认值和非必填项。
@GetMapping("/search")
public String searchUsers(
@RequestParam("q") String keyword,
@RequestParam(value = "page", defaultValue = "1") int pageNum) {
System.out.println("搜索关键词: " + keyword);
System.out.println("当前页码: " + pageNum);
return "results";
}
若参数不存在且未设置 defaultValue,将抛出异常;使用 required=false 可避免此问题。