本文目录导读:

我来为你详细介绍 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 的完整编写案例,涵盖了日常开发中的常见场景。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播