@PostMapping是@RequestMapping(method = RequestMethod.POST)的快捷注解,用于限定方法仅响应POST请求;支持@RequestBody接收JSON、@RequestParam获取表单参数、@PathVariable提取路径变量,并可结合@Valid校验与ResponseEntity返回201状态码。

@PostMapping 是 Spring MVC 中用于映射 HTTP POST 请求的注解,本质是 @RequestMapping(method = RequestMethod.POST) 的快捷写法。它通常用在控制器方法上,配合 @RestController 或 @Controller 使用,让方法只响应 POST 类型的请求。
基本用法:绑定路径和接收简单参数
最常见的是指定请求路径,并通过 @RequestBody 接收 JSON 数据,或用 @RequestParam 获取表单字段(x-www-form-urlencoded):
- 接收 JSON 对象:方法参数加
@RequestBody,Spring 自动反序列化为 Java 对象(需有对应实体类和无参构造器) - 接收表单数据:用
@RequestParam提取 key-value,或用@ModelAttribute绑定整个表单对象 - 路径可带占位符,如
@PostMapping("/users/{id}"),再用@PathVariable获取 id
处理不同 Content-Type 的注意事项
客户端发来的 POST 请求内容类型(Content-Type)决定后端怎么解析:
- 发送
application/json:必须用@RequestBody,确保实体类字段名与 JSON key 一致(或用@JsonProperty映射),且配置了 Jackson 消息转换器(Spring Boot 默认已配) - 发送
application/x-www-form-urlencoded:可用@RequestParam单个取值,或直接用对象接收(字段名匹配表单 name),无需@RequestBody - 上传文件(
multipart/form-data):要用@RequestPart或MultipartFile参数,不能用@RequestBody
返回结果与状态码控制
POST 方法通常创建资源,按 REST 规范建议返回 201 Created 状态码,并通过 Location 响应头指明新资源地址:
- 用
@ResponseStatus(HttpStatus.CREATED)直接设置状态码 - 用
ResponseEntity<T>精确控制状态码、响应头和响应体,例如:
return ResponseEntity.created(URI.create("/users/" + user.getId())).body(user); - 不显式设置时,默认返回 200 OK
结合验证与异常处理提升健壮性
实际开发中常需校验入参,避免无效数据入库:
- 在 DTO 类字段上加
@NotBlank、@Email等 Bean Validation 注解 - 方法参数前加
@Valid启用校验 - 搭配
@ExceptionHandler(MethodArgumentNotValidException.class)统一处理校验失败,返回友好错误信息 - 注意:若同时用了
@RequestBody和@Valid,校验失败会抛出MethodArgumentNotValidException,不是ConstraintViolationException


















