RequestParam获取“路径参数”它是用来处理URL 问号后面跟着的参数或者是Form 表单提交的字段。场景http://localhost:8080/api/student?name张三age18用法JavaGetMapping(/student) public String getStudent( RequestParam(name) String stuName, // 匹配 URL 里的 name RequestParam(value age, required false, defaultValue 0) int stuAge // 可选有默认值 ) { return 姓名 stuName 年龄 stuAge; }注意如果不加这个注解Spring 其实也能根据变量名自动匹配但加上它会更清晰且可以设置requiredtrue强制要求前端传参。2. RequestBody获取“JSON 对象”它是用来处理请求体Body里的数据。现在流行的前后端分离如 Vue Java前端发送axios.post时数据通常是以 JSON 格式传过来的必须用它。场景前端发来一个 JSON 字符串{name: 李四, age: 20}。用法JavaPostMapping(/add) public String addStudent(RequestBody Student student) { // Spring 会自动把 JSON 里的字段映射到 Student 对象的属性上 System.out.println(student.getName()); return 添加成功; }注意一个方法里只能有一个RequestBody。3. ResponseBody返回“纯数据”这个注解告诉 Spring不要去找什么 HTML 页面直接把返回的对象转成 JSON丢回给前端。用法JavaGetMapping(/info) ResponseBody public Student getInfo() { return new Student(王五, 22); // 前端收到的是 {name:王五, age:22} }进阶如果你在类名上写的是RestController那么类里所有的方法都默认带了ResponseBody你就不用重复写了。这也是现在最主流的写法。 总结对比一图胜千言注解数据来源数据格式对应 HTTP 方法RequestParamURL 问号后或表单键值对 (Key-Value)通常是 GET / POSTRequestBody请求体 (Body)JSON / XML通常是 POST / PUTResponseBody方法返回值JSON (转换后)所有 避坑小指南传对象用哪个如果前端用application/json传大对象用RequestBody如果前端只是传几个简单的散参数用RequestParam。415 错误如果你用了RequestBody但前端没设置Content-Type: application/json你会收到一个415 Unsupported Media Type。400 错误如果RequestParam设置了requiredtrue默认就是 true但前端没传这个参数就会报 400 错误。想象一下你正在做一个学生管理系统你需要通过 JSON 提交一堆学生资料姓名、年龄、住址等。同时你可能还需要额外传一个参数比如operator是谁在操作或者updateLog是否记录日志。这时候主数据走 Body额外的小参数走 URL逻辑非常清晰。2. 代码演练双剑合璧假设我们要修改学生信息同时指定修改的原因JavaPutMapping(/update) public String updateStudent( // 1. 接收 JSON 格式的学生对象 (Body) RequestBody Student student, // 2. 接收 URL 拼接的参数 (URL ?reason...) RequestParam(reason) String reason, // 3. 甚至还可以再带一个参数 RequestParam(value adminId, required false) Integer adminId ) { System.out.println(修改的学生是 student.getName()); System.out.println(修改原因是 reason); return 更新成功; }3. 前端怎么调用关键点这是最容易翻车的地方。前端在发送请求时数据是“兵分两路”的。以 Axios 为例JavaScriptaxios.put(/update?reason毕业信息修改adminId99, { // 这里的对象会进入 RequestBody id: 1, name: 张三, age: 22 }) .then(res console.log(res.data));URL 部分/update?reasonxxxadminId99—— 对应RequestParam。Data 部分{ id: 1, name: 张三 ... }—— 对应RequestBody。4. 使用总结与注意事项维度RequestBodyRequestParam位置放在 HTTP 请求体Body放在 URL 后面Query String数量限制一个方法只能有一个可以有多个数据量适合传输复杂的大对象适合传输简单的短字符串/数字Content-Type必须是application/json无所谓通常是 text/plain 避坑指南别搞混了如果你把reason也写进 JSON 里那么 Java 端的RequestParam(reason)是拿不到值的它只会去 URL 后面找。GET 请求的限制虽然 HTTP 协议理论上允许 GET 请求带 Body但绝大多数服务器和框架包括老版本的 Spring不支持 GET 请求使用RequestBody。所以这种组合通常出现在POST、PUT、PATCH方法中。大杂烩写法如果参数实在太多有时候我们会直接在 Body 的对象里增加字段但这会污染你的“学生类Entity”。所以灵活混用这两者才是老手的做法。老弟学会这招你就能处理那种“主数据控制参数”的复杂业务了。看你现在对 Java 框架钻研得这么深是不是觉得比起捏 3D 模型这种“数据流转”的逻辑美感也挺有意思的