Java案例怎么获取请求参数?

wen java案例 49

本文目录导读:

Java案例怎么获取请求参数?

  1. 原生 Servlet 方式
  2. Spring MVC 注解方式
  3. Spring MVC 路径变量
  4. 处理 JSON 请求体
  5. 处理文件上传
  6. 获取请求头信息
  7. 获取 Cookie
  8. 完整示例 - 用户注册
  9. 注意事项

在 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());
    }
}

注意事项

  1. GET 请求:参数在 URL 中,如 /api?name=张三
  2. POST 请求:参数在请求体中(表单或 JSON)
  3. 编码问题:中文参数需设置 request.setCharacterEncoding("UTF-8")
  4. 安全过滤:对用户输入进行 XSS/ SQL 注入过滤
  5. 参数验证:使用 @Valid 或手动验证

选择哪种方式取决于你的技术栈和具体需求,如果是旧项目用原生 Servlet,新项目推荐 Spring MVC 注解方式。

抱歉,评论功能暂时关闭!