本文目录导读:

在 Java Web 开发中,获取请求参数的方式取决于你使用的框架或规范,以下是几种常见场景的详细方法:
原生 Servlet 方式
适用于所有 Java Web 应用(JSP/Servlet)。
获取单个参数
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
String username = request.getParameter("username");
String password = request.getParameter("password");
}
获取多个值(如复选框)
String[] hobbies = request.getParameterValues("hobby");
// 返回数组,如 ["reading", "music"]
获取所有参数
Map<String, String[]> paramMap = request.getParameterMap();
paramMap.forEach((key, value) -> {
System.out.println(key + ": " + Arrays.toString(value));
});
获取参数名枚举
Enumeration<String> paramNames = request.getParameterNames();
while (paramNames.hasMoreElements()) {
String paramName = paramNames.nextElement();
String paramValue = request.getParameter(paramName);
}
Spring MVC 注解方式
最常用的方式,支持自动类型转换。
@RequestParam 注解
@GetMapping("/user")
public String getUser(@RequestParam("username") String username,
@RequestParam(value = "age", defaultValue = "18") int age) {
// 必须参数:username
// 可选参数:age,默认值18
return "User: " + username + ", Age: " + age;
}
直接参数接收(自动匹配)
@GetMapping("/login")
public String login(String username, String password) {
// 参数名与请求参数名一致时,可省略 @RequestParam
return "Login: " + username;
}
实体类接收
@PostMapping("/register")
public String register(User user) {
// 自动将请求参数映射到 User 对象的属性
return "Registered: " + user.getUsername();
}
// User 类
public class User {
private String username;
private String password;
// getter/setter 省略
}
Spring MVC 路径变量
获取 URL 中的路径参数。
@GetMapping("/users/{id}/{name}")
public String getUser(@PathVariable("id") Long id,
@PathVariable("name") String name) {
return "ID: " + id + ", Name: " + name;
}
// 请求:/users/123/张三
// 输出:ID: 123, Name: 张三
处理 JSON 请求体
适用于 POST/PUT 请求。
@PostMapping("/save")
public String saveUser(@RequestBody User user) {
// 接收 JSON 格式的请求体
return "Saved: " + user.getUsername();
}
// 请求体示例:
// {
// "username": "张三",
// "password": "123456"
// }
处理文件上传
需要 @RequestParam 配合 MultipartFile。
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file,
@RequestParam("description") String desc) {
String fileName = file.getOriginalFilename();
return "File: " + fileName + ", Description: " + desc;
}
获取请求头信息
@GetMapping("/headers")
public String getHeaders(@RequestHeader("User-Agent") String userAgent,
@RequestHeader("Accept") String accept) {
return "UA: " + userAgent + ", Accept: " + accept;
}
获取 Cookie
@GetMapping("/cookies")
public String getCookie(@CookieValue("JSESSIONID") String sessionId) {
return "Session ID: " + sessionId;
}
完整示例 - 用户注册
@RestController
@RequestMapping("/api/user")
public class UserController {
@PostMapping("/register")
public ResponseEntity<?> register(@RequestParam("username") String username,
@RequestParam("password") String password,
@RequestParam(value = "email", required = false) String email) {
// 业务逻辑
User user = new User(username, password, email);
return ResponseEntity.ok("注册成功:" + user.getUsername());
}
// 使用实体类接收
@PostMapping("/register2")
public ResponseEntity<?> register2(@Valid @RequestBody User user) {
// 自动验证(需要 @Valid 注解)
return ResponseEntity.ok("注册成功:" + user.getUsername());
}
}
注意事项
- GET 请求:参数在 URL 中,如
/api?name=张三 - POST 请求:参数在请求体中(表单或 JSON)
- 编码问题:中文参数需设置
request.setCharacterEncoding("UTF-8") - 安全过滤:对用户输入进行 XSS/ SQL 注入过滤
- 参数验证:使用
@Valid或手动验证
选择哪种方式取决于你的技术栈和具体需求,如果是旧项目用原生 Servlet,新项目推荐 Spring MVC 注解方式。