整理了下接收参数的注解。
| 注解 | 绑定来源 | 支持类型 | 典型用途 | 备注 | 
|---|---|---|---|---|
@ModelAttribute | 
请求参数自动绑定到 JavaBean(含嵌套对象) | JavaBean(含集合) | 表单提交(application/x-www-form-urlencoded) | 
可用于初始化默认值 | 
@RequestBody | 
请求体(JSON/XML) | 任意类型(常用于对象) | JSON 请求体 {"id":1,"name":"Tom"} | 
常与 @PostMapping、@PutMapping 结合使用 | 
@RequestParam | 
请求参数(Query 或 Form) | 基本类型、String、数组、List | ?id=1&name=Tom | 
适合简单参数 | 
@PathVariable | 
URL 路径参数 | 基本类型、String | /user/123 → id=123 | 
REST 风格接口 | 
简单示例对比
@ModelAttribute
@PostMapping("/register")
public String register(@ModelAttribute User user) {
    // 表单数据将自动绑定到 User 对象中
    return "userInfo";
}
@RequestBody
@PostMapping("/api/user")
public ResponseEntity<?> saveUser(@RequestBody User user) {
    // JSON 请求体 {"name":"Tom","age":20}
    return ResponseEntity.ok(user);
}
@RequestParam
@GetMapping("/search")
public String search(@RequestParam String keyword) {
    // /search?keyword=java
    return keyword;
}
@PathVariable
@GetMapping("/user/{id}")
public String getUser(@PathVariable Long id) {
    return "ID: " + id;
}
注意,@RequestBody 需要使用 HttpMessageConverter(如 Jackson、FastJson)支持 JSON 解析。
恐惧与否是你的选择。– 烟沙九洲
