✅ Java 后端参数接收注解 & 前端传参格式对照
后端注解 | 前端 Content-Type | 前端传参方式 | 说明 |
---|
@RequestParam | application/x-www-form-urlencoded | URL参数 / form表单提交 / Postman form-data | 常用于 key=value 形式的参数;适合少量简单参数 |
@RequestParam | URL拼接 | /api/test?id=123&name=abc | Get/Post 请求都行,参数在 query string |
@PathVariable | 不关心 Content-Type | URL 路径参数 | @GetMapping("/api/test/{id}") ,URL 要写 /api/test/123 |
@RequestBody | application/json | JSON 格式,raw 模式,post body 传参 | 专门接收 JSON 格式,适合复杂对象、数组传递 |
@ModelAttribute | application/x-www-form-urlencoded 或 multipart/form-data | key=value 的 form-data,或表单提交 | 接收 form-data 或表单数据,会自动封装为对象 |
@RequestPart | multipart/form-data | 文件上传,配合 JSON、表单混合传递 | 用于上传文件或文件 + 数据的组合提交(MultipartFile 接收) |
MultipartFile | multipart/form-data | form-data 方式上传文件 | 专门处理文件上传 |
HttpServletRequest / HttpServletResponse | 不关心 Content-Type | 一般用于文件下载、复杂定制化请求 | 原生的请求、响应操作,常见于流下载、session处理 |
✅ 详细解释
1️⃣ @RequestParam
@GetMapping("/test")
public String test(@RequestParam String name, @RequestParam Integer age)
前端传参
- GET:
/test?name=Tom&age=12
- POST:
application/x-www-form-urlencoded
name=Tom&age=12
2️⃣ @PathVariable
@GetMapping("/test/{id}")
public String test(@PathVariable Long id)
前端传参
3️⃣ @RequestBody
@PostMapping("/test")
public String test(@RequestBody User user)
前端传参
{
"name": "Tom",
"age": 12
}
常用于前端传 JSON 对象、数组
🚨 如果你忘记 Content-Type: application/json
,Spring 会报错!
4️⃣ @ModelAttribute
@PostMapping("/test")
public String test(@ModelAttribute User user)
前端传参
application/x-www-form-urlencoded
name=Tom&age=12
- 或
multipart/form-data
(主要用在有文件上传时)
5️⃣ @RequestPart
@PostMapping("/upload")
public String upload(@RequestPart("file") MultipartFile file, @RequestPart("user") String userJson)
前端传参
multipart/form-data
- 文件 + JSON 同时上传
(需要自己在前端 form-data
里传 JSON 字符串,再后端反序列化)
6️⃣ MultipartFile
@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file)
前端传参
multipart/form-data
直接在 form-data
里传文件。
✅ 常见前端传参方式 & 后端适配
前端请求 | Content-Type | 后端接收注解 |
---|
URL传参 /api?id=1&name=Tom | 无 或 application/x-www-form-urlencoded | @RequestParam / @PathVariable |
表单提交 key=value | application/x-www-form-urlencoded | @RequestParam / @ModelAttribute |
JSON {"id":1,"name":"Tom"} | application/json | @RequestBody |
文件上传 | multipart/form-data | MultipartFile / @RequestPart |
文件 + JSON | multipart/form-data | @RequestPart |
✅ 总结下选择建议!
场景 | 用法 |
---|
简单的参数 | @RequestParam + application/x-www-form-urlencoded |
路径变量(RESTful) | @PathVariable |
复杂对象/数组(JSON) | @RequestBody + application/json |
表单传对象 | @ModelAttribute + application/x-www-form-urlencoded |
文件上传或混合参数 | MultipartFile / @RequestPart + multipart/form-data |
文件下载/流操作 | HttpServletResponse |