@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

java 复制代码
@PostMapping("/register")
public String register(@ModelAttribute User user) {
    // 表单数据将自动绑定到 User 对象中
    return "userInfo";
}

@RequestBody

java 复制代码
@PostMapping("/api/user")
public ResponseEntity<?> saveUser(@RequestBody User user) {
    // JSON 请求体 {"name":"Tom","age":20}
    return ResponseEntity.ok(user);
}

@RequestParam

java 复制代码
@GetMapping("/search")
public String search(@RequestParam String keyword) {
    // /search?keyword=java
    return keyword;
}

@PathVariable

java 复制代码
@GetMapping("/user/{id}")
public String getUser(@PathVariable Long id) {
    return "ID: " + id;
}

注意,@RequestBody 需要使用 HttpMessageConverter(如 Jackson、FastJson)支持 JSON 解析。

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

相关推荐
gugucoding15 分钟前
57. 【Java】日志框架:SLF4J与Logback
java·开发语言·logback
今天的砖头有点烫手啊15 分钟前
JVM 调优实战:从 GC 日志到参数优化,一次完整排查
java·jvm
爱奥尼欧36 分钟前
10.C++ string 实现详解
java·开发语言·c++
小飞学编程...37 分钟前
【equals 、Comparable、Comparator 三者的区别】
java·python
骇客野人1 小时前
Java分布式任务调度方案(完整落地指南)
java·开发语言·分布式
JacksonMx1 小时前
Spring @Async 坑点 + 改造方案
java·开发语言
Dovis(誓平步青云)1 小时前
牛奶不能减成负数:冰箱库存的筛选、去重与不可变更新
android·java·开发语言
SWAGGY..2 小时前
【C++初阶】:(15)模板进阶--从非类型参数到模板特化与分离编译
java·服务器·前端
楠楠子呀2 小时前
独立站聊天转化全链路:从二维码引流到数据复盘
java·javascript·数据仓库·python·c#·自动化·etl
yurenpai(27届找实习中)2 小时前
从零读懂AI智能客服(二):Java 多模块项目如何协作:Maven 依赖、Spring 注入与运行时装配
java·spring·maven