利用easyexcel写一个完整的数据导入并带有校验提示的功能
时间: 2024-05-01 22:21:17 浏览: 136
好的,这里提供一个基于 EasyExcel 的数据导入功能,并带有校验提示的示例代码。其中,校验规则为检查必填字段是否为空,以及检查某些字段是否符合特定格式要求(如日期格式等)。
首先,我们需要定义一个实体类来表示导入的数据:
```java
@Data
public class ImportData {
@NotEmpty(message = "姓名不能为空")
private String name;
@NotNull(message = "年龄不能为空")
@Min(value = 18, message = "年龄必须大于等于18岁")
private Integer age;
@Pattern(regexp = "\\d{4}-\\d{2}-\\d{2}", message = "日期格式必须为YYYY-MM-DD")
private String date;
}
```
上述实体类中使用了 JSR 303 校验注解,其中 `@NotEmpty` 检查字符串是否为空,`@NotNull` 检查对象是否为空,`@Min` 检查数字是否大于等于指定值,`@Pattern` 检查字符串是否符合指定正则表达式。
接下来,我们可以编写一个数据导入的 Controller 方法:
```java
@PostMapping("/import")
public void importData(@RequestParam("file") MultipartFile file) throws IOException {
List<ImportData> dataList = EasyExcel.read(file.getInputStream(), ImportData.class, new ImportDataListener()).sheet().doReadSync();
// 处理导入的数据
}
```
其中,`ImportDataListener` 是一个继承自 `AnalysisEventListener` 的监听器类,用于在读取 Excel 文件时对数据进行校验和处理:
```java
public class ImportDataListener extends AnalysisEventListener<ImportData> {
private List<ImportData> dataList = new ArrayList<>();
@Override
public void invoke(ImportData data, AnalysisContext context) {
// 校验数据
Set<ConstraintViolation<ImportData>> violations = Validation.buildDefaultValidatorFactory().getValidator().validate(data);
if (!violations.isEmpty()) {
StringBuilder errorMsgBuilder = new StringBuilder("第" + context.readRowHolder().getRowIndex() + "行数据校验失败:");
for (ConstraintViolation<ImportData> violation : violations) {
errorMsgBuilder.append(violation.getMessage()).append("; ");
}
throw new RuntimeException(errorMsgBuilder.toString());
}
dataList.add(data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 处理导入的数据
}
}
```
在 `invoke` 方法中,我们首先对读取到的数据进行校验,如果校验失败则抛出异常并提示校验失败信息。如果校验通过,则将数据添加到 `dataList` 中。在 `doAfterAllAnalysed` 方法中,我们可以对导入的数据进行处理。
最后,我们需要在前端页面中添加一个文件上传的表单,并将文件上传到该 Controller 方法中:
```html
<form method="POST" enctype="multipart/form-data" action="/import">
<input type="file" name="file" />
<button type="submit">导入数据</button>
</form>
```
这样,当用户上传文件并点击导入数据按钮时,就会触发数据导入功能,并且在数据校验失败时会给出相应的提示信息。
阅读全文