Spring Boot参数处理总结与示例

51 阅读2分钟

1. 简单参数

  • 用途:接收URL中的查询参数(如 /user?name=Tom&age=20)。

  • 规则

    • 方法形参名与请求参数名一致时,自动绑定。
    • 不一致时,使用 @RequestParam 手动映射。
  • 示例

    @GetMapping("/user")
    public String simpleParam(
        String name,  // 形参名与请求参数名一致
        @RequestParam("userAge") Integer age  // 手动映射
    ) {
        return "Name: " + name + ", Age: " + age;
    }
    

2. 实体参数(对象参数)

  • 用途:将多个请求参数自动封装为实体对象。

  • 规则:请求参数名需与实体类的属性名一致。

  • 示例

    public class User {
        private String name;
        private Integer age;
        // Getter & Setter
    }
    
    @PostMapping("/user")
    public String entityParam(User user) {
        return "User: " + user.getName() + ", Age: " + user.getAge();
    }
    
    • 请求示例:POST /user?name=Tom&age=20

3. 数组/集合参数

  • 用途:接收多个同名请求参数(如 hobbies=篮球&hobbies=游戏)。

  • 规则

    • 数组:形参名与请求参数名一致。
    • 集合:必须使用 @RequestParam 绑定。
  • 示例

    @GetMapping("/hobbies")
    public String collectionParam(
        String[] hobbies,  // 数组
        @RequestParam List<String> hobbyList  // 集合
    ) {
        return "Hobbies: " + Arrays.toString(hobbies) + ", List: " + hobbyList;
    }
    

4. 日期参数

  • 用途:接收日期类型参数,需指定格式。

  • 规则:使用 @DateTimeFormat(pattern="格式") 注解。

  • 示例

    @GetMapping("/date")
    public String dateParam(
        @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date
    ) {
        return "Date: " + date;
    }
    
    • 请求示例:GET /date?date=2023-10-01

5. JSON参数

  • 用途:接收请求体中的JSON数据。

  • 规则:使用 @RequestBody 注解,自动反序列化为对象。

  • 示例

    @PostMapping("/json")
    public String jsonParam(@RequestBody User user) {
        return "JSON User: " + user.getName();
    }
    
    • 请求示例:POST /json,请求体为 {"name": "Tom", "age": 20}

6. 路径参数

  • 用途:从URL路径中提取参数(如 /user/1)。

  • 规则:使用 @PathVariable 注解。

  • 示例

    @GetMapping("/user/{id}")
    public String pathParam(@PathVariable Integer id) {
        return "User ID: " + id;
    }
    

总结对比表

参数类型适用场景核心注解示例请求格式
简单参数URL查询参数@RequestParam/user?name=Tom
实体参数多字段对象封装/user?name=Tom&age=20
数组/集合同名多值参数@RequestParam/hobbies?hobbies=篮球&hobbies=游戏
日期参数日期格式参数@DateTimeFormat/date?date=2023-10-01
JSON参数请求体中的JSON数据@RequestBodyPOST /json + JSON Body
路径参数URL路径中的动态值@PathVariable/user/1