@ModelAttribute、@RequestBody、@RequestParam、@PathVariable 注解对比
整理了下接收参数的注解。
注解 | 绑定来源 | 支持类型 | 典型用途 | 备注 |
---|---|---|---|---|
@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=javareturn keyword;
}
@PathVariable
@GetMapping("/user/{id}")
public String getUser(@PathVariable Long id) {return "ID: " + id;
}
注意,@RequestBody 需要使用 HttpMessageConverter(如 Jackson、FastJson)支持 JSON 解析。
恐惧与否是你的选择。-- 烟沙九洲