@PostMapping 是 Spring Boot 中处理 HTTP POST 请求的注解,等价于 @RequestMapping(method = RequestMethod.POST),用于控制器方法并支持路径映射、多种数据绑定(@RequestBody/@RequestParam/@RequestPart)、content-type 限制及表单提交处理。

@PostMapping 是 Spring Boot 中用于映射 HTTP POST 请求的注解,本质是 @RequestMapping(method = RequestMethod.POST) 的快捷写法。它通常用在控制器(@Controller 或 @RestController)的方法上,告诉 Spring:这个方法专门处理指定路径的 POST 请求。
基本用法:绑定请求路径
最简单的使用方式是指定请求路径:
- 加在方法上,配合
@RestController使用(返回 JSON):
@RestController
public class UserController {
@PostMapping("/users")
public String createUser(@RequestBody User user) {
// 处理创建逻辑
return "User created: " + user.getName();
}
}
此时,前端发送 POST 请求到 /users,且请求体为 JSON(如 {"name":"Alice","email":"a@example.com"}),Spring 会自动将 JSON 反序列化为 User 对象。
接收不同来源的数据
POST 请求的数据可以来自请求体、表单或 URL 查询参数,需搭配不同注解:
立即学习“Java免费学习笔记(深入)”;
-
@RequestBody:读取原始请求体(常用于 JSON、XML) -
@RequestParam:获取 URL 查询参数(?name=Alice)或表单字段(application/x-www-form-urlencoded) -
@RequestPart:处理 multipart 表单(如文件上传)
例如同时接收 JSON 和查询参数:
@PostMapping("/users")
public ResponseEntity<User> createUser(
@RequestBody User user,
@RequestParam String source) {
user.setSource(source);
return ResponseEntity.ok(userService.save(user));
}
设置请求头与内容类型限制
可通过 consumes 和 produces 属性精确控制:
-
consumes = "application/json":只接受 JSON 格式的请求体 -
produces = "application/json;charset=UTF-8":响应头自动设为 JSON 并指定编码
示例:
@PostMapping(
value = "/api/users",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE
)
public User createUser(@RequestBody User user) {
return userService.create(user);
}
如果客户端发来 XML 或未带 Content-Type: application/json,该请求将直接返回 415 Unsupported Media Type。
处理表单提交(非 JSON)
传统 HTML 表单默认以 application/x-www-form-urlencoded 提交,此时不推荐用 @RequestBody,而应使用 @ModelAttribute 或多个 @RequestParam:
@PostMapping("/register")
public String handleRegisterForm(
@RequestParam String username,
@RequestParam String email,
@RequestParam Integer age) {
// 处理表单字段
return "success";
}
或者用 @ModelAttribute 自动绑定到对象(要求字段名与表单 name 一致):
@PostMapping("/register")
public String handleRegister(@ModelAttribute User user) {
userService.save(user);
return "redirect:/success";
}


















