Java PostMapping案例怎么编写

wen java案例 33

本文目录导读:

Java PostMapping案例怎么编写

  1. 基础配置
  2. 基础 PostMapping 案例
  3. 高级用法
  4. 统一返回结果封装
  5. 前端请求示例
  6. 注意事项

我来为你详细介绍 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);
});

注意事项

  1. Content-Type 设置:JSON 请求需要设置 Content-Type: application/json
  2. 参数验证:使用 @Valid@Validated 进行参数校验
  3. 异常处理:建议添加全局异常处理器
  4. 安全性:考虑添加身份验证和权限控制
  5. 日志记录:重要操作记录日志

这就是 Java 中 @PostMapping 的完整编写案例,涵盖了日常开发中的常见场景。

抱歉,评论功能暂时关闭!