注解参数校验
注解校验
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;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validator;@RestController
@RequestMapping("/task")
public class TaskController {@Autowiredprivate 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. 解析 ExcelList<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);}
}