EasyExcel校验数据抛异常需要使用ExcelAnalysisException

使用Excel导入数据的时候,避免不了校验数据这个过程,在使用EasyExcel进行数据校验的时候,在AnalysisEventListener中抛异常要使用ExcelAnalysisException而不是自己定义的运行时异常,EasyExcel会捕捉所有的非ExcelAnalysisException异常并封装成ExcelAnalysisException抛出,如下。

    private void onException(AnalysisContext analysisContext, Exception e) {
        for (ReadListener readListenerException : analysisContext.currentReadHolder().readListenerList()) {
            try {
                readListenerException.onException(e, analysisContext);
            } catch (RuntimeException re) {
                throw re;
            } catch (Exception e1) {
                throw new ExcelAnalysisException(e1.getMessage(), e1);
            }
        }
    }

这样的话,给用户的提示就会有多余的错误信息,对用户来说是不友好的。

请添加图片描述

除此之外,还要记得在全局异常处理器中加入ExcelAnalysisException的拦截,这样才会给用户提示你想要提示的信息

    @ExceptionHandler(value = {ExcelAnalysisException.class})
    public R<Void> handlerExcelAnalysisException(HttpServletRequest request, ExcelAnalysisException e) {
        log.warn(request.getRequestURI(), e);
        return R.error(e.getMessage());
    }
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于EasyExcel校验文件数据,你可以使用EasyExcel提供的校验功能来实现。下面是一个简单的示例代码,演示如何使用EasyExcel校验文件数据: ```java public class EasyExcelValidator { public static void main(String[] args) { // 读取Excel文件 String fileName = "path/to/your/excel/file.xlsx"; ExcelReader reader = EasyExcel.read(fileName).build(); ExcelSheetValidator validator = new ExcelSheetValidator(); // 设置校验器 Sheet sheet = reader.getSheets().get(0); sheet.setSheetValidator(validator); // 执行校验 reader.read(sheet); // 获取校验结果 if (validator.hasErrors()) { List<SheetError> sheetErrors = validator.getErrors(); for (SheetError error : sheetErrors) { System.out.println("Sheet: " + error.getSheetName()); System.out.println("Error Message: " + error.getMessage()); System.out.println("Error Rows: " + error.getErrorRows()); System.out.println("========================================="); } } else { System.out.println("No errors found."); } // 关闭资源 reader.finish(); } } public class ExcelSheetValidator extends AbstractSheetContentsValidator { private final List<SheetError> errors = new ArrayList<>(); @Override public void handleCell(CellData<?> cellData, AnalysisContext context) { // 校验逻辑 // 这里可以根据业务需求进行自定义校验规则,将不符合要求的数据添加到errors列表中 } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 校验完成后的处理逻辑 // 可以在这里对校验结果进行整理、分析等操作 } public boolean hasErrors() { return !errors.isEmpty(); } public List<SheetError> getErrors() { return errors; } } public class SheetError { private String sheetName; private String message; private List<Integer> errorRows; // 构造函数、getter和setter方法省略 } ``` 在上面的示例代码中,我们创建了一个`ExcelSheetValidator`类,继承自`AbstractSheetContentsValidator`,并重写了`handleCell`方法来实现校验逻辑。在`handleCell`方法中,可以根据业务需求自定义校验规则,并将不符合要求的数据添加到`errors`列表中。 在`doAfterAllAnalysed`方法中,我们可以对校验结果进行整理、分析等操作。最后,可以通过调用`hasErrors`方法判断是否存在错误,并通过调用`getErrors`方法获取错误信息。 这只是一个简单的示例,你可以根据实际需求进行更复杂的校验逻辑的实现。希望可以帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值