本文目录导读:

我来为你详细介绍 Java 中 @PostMapping 的编写案例。
基础配置
首先确保在 pom.xml 中添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
基础 PostMapping 案例
1 接收 JSON 数据
@RestController
@RequestMapping("/api/users")
public class UserController {
// 接收单个属性
@PostMapping("/login")
public Result login(@RequestBody LoginRequest loginRequest) {
// 业务逻辑
System.out.println("用户名:" + loginRequest.getUsername());
System.out.println("密码:" + loginRequest.getPassword());
return Result.success("登录成功");
}
// 接收复杂对象
@PostMapping("/register")
public Result register(@RequestBody @Valid UserDTO userDTO) {
// 参数验证和业务处理
return Result.success("注册成功");
}
}
// 请求体对应的 DTO
@Data
public class LoginRequest {
private String username;
private String password;
}
@Data
public class UserDTO {
@NotBlank(message = "用户名不能为空")
private String username;
@NotBlank(message = "密码不能为空")
@Size(min = 6, max = 20, message = "密码长度6-20位")
private String password;
@Email(message = "邮箱格式不正确")
private String email;
private Integer age;
}
2 接收表单数据
@RestController
@RequestMapping("/api")
public class FormController {
// 使用 @RequestParam 接收单个参数
@PostMapping("/submit")
public Result submitForm(
@RequestParam("name") String name,
@RequestParam("age") Integer age,
@RequestParam(value = "phone", required = false) String phone) {
System.out.println("姓名:" + name);
System.out.println("年龄:" + age);
System.out.println("电话:" + phone);
return Result.success("提交成功");
}
// 使用对象接收多个参数
@PostMapping("/form-data")
public Result handleFormData(FormData formData) {
// Spring Boot 会自动将表单参数绑定到对象
return Result.success("处理成功:" + formData.toString());
}
}
@Data
public class FormData {
private String name;
private Integer age;
private String phone;
private String address;
}
3 文件上传
@RestController
@RequestMapping("/api/file")
public class FileController {
@PostMapping("/upload")
public Result uploadFile(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return Result.error("文件为空");
}
try {
// 获取文件名
String fileName = file.getOriginalFilename();
// 保存文件
String filePath = "/uploads/" + fileName;
file.transferTo(new File(filePath));
return Result.success("上传成功:" + fileName);
} catch (IOException e) {
return Result.error("上传失败:" + e.getMessage());
}
}
@PostMapping("/upload-multi")
public Result uploadMultipleFiles(@RequestParam("files") MultipartFile[] files) {
List<String> uploadedFiles = new ArrayList<>();
for (MultipartFile file : files) {
if (!file.isEmpty()) {
try {
String fileName = file.getOriginalFilename();
file.transferTo(new File("/uploads/" + fileName));
uploadedFiles.add(fileName);
} catch (IOException e) {
return Result.error("上传失败:" + e.getMessage());
}
}
}
return Result.success("上传成功:" + uploadedFiles);
}
}
高级用法
1 带路径变量的 PostMapping
@RestController
@RequestMapping("/api/orders")
public class OrderController {
// @PostMapping + @PathVariable
@PostMapping("/{orderId}/update")
public Result updateOrder(
@PathVariable Long orderId,
@RequestBody OrderUpdateDTO updateDTO) {
System.out.println("更新订单:" + orderId);
return Result.success("更新成功");
}
// 多个路径变量
@PostMapping("/{userId}/orders/{orderId}/items")
public Result addOrderItem(
@PathVariable Long userId,
@PathVariable Long orderId,
@RequestBody OrderItemDTO itemDTO) {
return Result.success("添加订单项成功");
}
}
2 接收多种数据格式
@RestController
@RequestMapping("/api/mixed")
public class MixedDataController {
// 同时接收路径变量、请求参数和请求体
@PostMapping("/{category}/save")
public Result saveData(
@PathVariable String category,
@RequestParam("userId") Long userId,
@RequestBody Map<String, Object> data) {
System.out.println("分类:" + category);
System.out.println("用户ID:" + userId);
System.out.println("数据:" + data);
return Result.success("保存成功");
}
// 接收 JSON 数组
@PostMapping("/batch")
public Result batchSave(@RequestBody List<UserDTO> users) {
System.out.println("批量保存:" + users.size() + "条数据");
return Result.success("批量保存成功");
}
}
统一返回结果封装
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {
private Integer code;
private String message;
private T data;
public static <T> Result<T> success(T data) {
return new Result<>(200, "success", data);
}
public static <T> Result<T> success(String message) {
return new Result<>(200, message, null);
}
public static <T> Result<T> error(String message) {
return new Result<>(500, message, null);
}
}
前端请求示例
1 JavaScript (Fetch API)
// 发送 JSON 数据
fetch('/api/users/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: 'admin',
password: '123456'
})
})
.then(response => response.json())
.then(data => console.log(data));
// 发送表单数据
const formData = new FormData();
formData.append('name', '张三');
formData.append('age', 25);
formData.append('phone', '13800138000');
fetch('/api/submit', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => console.log(data));
// 发送文件
const fileInput = document.querySelector('input[type="file"]');
const file = fileInput.files[0];
const formData = new FormData();
formData.append('file', file);
fetch('/api/file/upload', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => console.log(data));
2 Axios 请求
import axios from 'axios';
// POST JSON 数据
axios.post('/api/users/login', {
username: 'admin',
password: '123456'
}).then(response => {
console.log(response.data);
});
// POST 表单数据
const formData = new FormData();
formData.append('name', '张三');
formData.append('age', 25);
axios.post('/api/form-data', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
}).then(response => {
console.log(response.data);
});
// POST 文件上传
const uploadData = new FormData();
uploadData.append('file', file);
axios.post('/api/file/upload', uploadData, {
headers: {
'Content-Type': 'multipart/form-data'
}
}).then(response => {
console.log(response.data);
});
注意事项
- Content-Type 设置:JSON 请求需要设置
Content-Type: application/json - 参数验证:使用
@Valid或@Validated进行参数校验 - 异常处理:建议添加全局异常处理器
- 安全性:考虑添加身份验证和权限控制
- 日志记录:重要操作记录日志
这就是 Java 中 @PostMapping 的完整编写案例,涵盖了日常开发中的常见场景。