注解参数校验

注解校验

https://cloud.iocoder.cn/validator/#_1-%E5%8F%82%E6%95%B0%E6%A0%A1%E9%AA%8C%E6%B3%A8%E8%A7%A3

手动校验

复制代码
@Resource
private Validator validator;
java 复制代码
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validator;

@RestController
@RequestMapping("/task")
public class TaskController {

    @Autowired
    private Validator validator; // Spring 会自动注入 Hibernate Validator

    @PostMapping("/importTaskExcel")
    public CommonResult<?> importTaskExcel(@RequestParam("file") MultipartFile file) throws Exception {
        if (!verifySuffix(file)) {
            throw new ServiceException("文件必须以xls、xlsx结尾");
        }

        // 1. 解析 Excel
        List<TaskImportExcelVO> list = ExcelUtils.read(file, true, TaskImportExcelVO.class);

        // 2. 手动逐条校验
        List<String> errorMessages = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            TaskImportExcelVO vo = list.get(i);
            Set<ConstraintViolation<TaskImportExcelVO>> violations = validator.validate(vo);
            if (!violations.isEmpty()) {
                for (ConstraintViolation<TaskImportExcelVO> violation : violations) {
                    // 收集错误,带上 Excel 行号更直观
                    errorMessages.add("第" + (i + 1) + "行: " + violation.getMessage());
                }
            }
        }

        // 3. 如果有错误,直接返回
        if (!errorMessages.isEmpty()) {
            return CommonResult.error("导入失败", errorMessages);
        }

        // 4. 正常导入
        return companyTaskService.importTaskExcel(list);
    }
}
相关推荐
问窗32 分钟前
Rust实现Windows本地搜索工具
windows·搜索引擎·rust
Roc-xb1 小时前
你似乎已在另一个帐户上设置了 Windows Hello。请将人脸识别从其他帐户删除,然后重试。
windows·人脸识别
HAPPY酷2 小时前
【ROS2】16G 内存笔记本跑 ROS2 仿真?VMware 虚拟机“保姆级”配置指南 (R9 7940HX + RTX 4060)
java·linux·ide·windows·pycharm
夜雪一千11 小时前
Python enumerate() 函数完整详解:遍历同时获取索引,告别手动计数
服务器·windows·python
问简21 小时前
【共享盘】ubuntu、windows
linux·windows·ubuntu
公子小六1 天前
基于.NET的Windows窗体编程之WinForms图像控件
windows·microsoft·c#·.net·winforms
狂热开发者1 天前
用 Typeoff 把会后口述整理成 Markdown 决策记录
人工智能·windows·macos·ios·安卓
何中应1 天前
Windows7 虚拟机如何传文件
windows·vmware·虚拟机
一只小bit1 天前
LangChain 核型组件与消息管理及提示词模版
windows·microsoft·langchain
ofoxcoding1 天前
Codex Computer Use 完整指南:AI 自动操控 Mac 与 Windows 桌面实战详解
人工智能·windows·macos·ai