@ModelAttribute、@RequestBody、@RequestParam、@PathVariable 注解对比

91 阅读1分钟

整理了下接收参数的注解。

注解绑定来源支持类型典型用途备注
@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适合简单参数
@PathVariableURL 路径参数基本类型、String/user/123 → id=123REST 风格接口

简单示例对比

@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 解析。

恐惧与否是你的选择。-- 烟沙九洲