1、创建一个Excel模板2、根据模板创建对应的实体类并在属性上加上校验Data AllArgsConstructor NoArgsConstructor public class Person implements Serializable { private Integer id; ExcelProperty(姓名) NotNull(message 姓名不能为空) private String name; ExcelProperty(年龄) NotNull(message 年龄不能为空) Min(value 0, message 年龄不能小于0) Max(value 100, message 年龄不能大于100) private Integer age; NotNull(message 性别不能为空) ExcelProperty(性别) private String sex; }3、定义一个通用的监听器(EasyExcel内置的监听器)Slf4j //通用Excel监听器 AllArgsConstructor public class CommonExcelListenerT extends AnalysisEventListenerT { //借助validator对象手动校验 private final Validator validator; //用于限定导入数据的行数 private final int maxRows 2000; // 存储校验通过的数据 private final ListT validDataList new ArrayList(); // 存储错误信息 private final ListString errorMessages new ArrayList(); public CommonExcelListener(Validator validator) { this.validator validator; } // 记录已处理的行数用于限制 private int rowCount 0; //每读一行数据都会执行这个方法 Override public void invoke(T data, AnalysisContext context) { // 检查是否超过最大行数限制 if (rowCount maxRows) { throw MyException.myException(HttpStatus.HTTP_BAD_REQUEST, Excel数据行数超过限制(最多 maxRows 行)); } //校验数据 SetConstraintViolationT violations validator.validate(data); if (!violations.isEmpty()) { String rowError 第 (context.readRowHolder().getRowIndex() 1) 行: violations.stream() .map(item - item.getMessage()) .collect(Collectors.joining(; )); errorMessages.add(rowError); } else { validDataList.add(data); } } Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { // 读取完成后如果有错误抛出异常 if (!CollUtil.isEmpty(errorMessages)) { throw MyException.myException(HttpStatus.HTTP_BAD_REQUEST, Excel数据校验失败: CollUtil.join(errorMessages, \n)); } } // 提供方法获取校验通过的数据 public ListT getValidDataList() { return validDataList; } }4、接口定义Autowired private Validator validator; PostMapping(/import) public void import(RequestParam(file) MultipartFile file) { try (InputStream inputStream file.getInputStream()) { //使用通用监听器读取并校验数据 CommonExcelListenerPerson listener new CommonExcelListener(validator); EasyExcel.read(inputStream, Person.class, listener) .sheet(0) .doRead(); //获取校验通过的有效数据 ListPerson validList listener.getValidDataList(); if (validList.isEmpty()) { throw MyException.myException(HttpStatus.HTTP_BAD_REQUEST, Excel文件中无有效数据); } personMapper.insert(validList); } catch (Exception e) { throw MyException.myException(HttpStatus.HTTP_BAD_REQUEST, e.getMessage()); } }