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

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

相关推荐
两点王爷4 小时前
Java基础面试题——【Java语言特性】
java·开发语言
choke2334 小时前
[特殊字符] Python 文件与路径操作
java·前端·javascript
choke2334 小时前
Python 基础语法精讲:数据类型、运算符与输入输出
java·linux·服务器
岁岁种桃花儿5 小时前
CentOS7 彻底卸载所有JDK/JRE + 重新安装JDK8(实操完整版,解决kafka/jps报错)
java·开发语言·kafka
一灰灰blog5 小时前
Spring AI中的多轮对话艺术:让大模型主动提问获取明确需求
数据库·人工智能·spring
roman_日积跬步-终至千里5 小时前
【Java并发】Java 线程池实战:警惕使用CompletableFuture.supplyAsync
java·开发语言·网络
毕设源码-钟学长5 小时前
【开题答辩全过程】以 基于Springboot的扶贫众筹平台为例,包含答辩的问题和答案
java·spring boot·后端
CodeSheep程序羊6 小时前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展
Java水解6 小时前
【JAVA 进阶】Spring AOP核心原理:JDK与CGLib动态代理实战解析
后端·spring
我是咸鱼不闲呀6 小时前
力扣Hot100系列19(Java)——[动态规划]总结(上)(爬楼梯,杨辉三角,打家劫舍,完全平方数,零钱兑换)
java·leetcode·动态规划