EasyExcel自定义非空注解,类似@NotBlank注解。

写在前面

今天开发excel导入数据的功能,一切都很顺利。但是当看到需求文档,其中有几个列的数据是必输的。于是我想到了,在实体类属性上加@NotBlank注解不就可以了嘛!但是我写接口入参是一个文件,所以解析实体后这个注解根本不起作用。于是想到自己创建自定义注解,校验非空的列。

正题

1.创建注解类

写过注解的同学应该都比较熟悉了,直接上代码。

字符串非空校验

/**
 * Excel导入必填校验注解
 *
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ExcelValid {
    String message() default "非空字段必填";
}

字符串长度校验注解

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ExcelStrLengthValid {
    int length() default 0;
    String message() default "字段超长";
}

int长度校验

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ExcelIntValid {
    int min();
    int max();
    String message() default "整数超过长度范围";
}

还可以写其他类型的校验注解,这里就不展示了。

2.导入字段检验逻辑

public class ExcelInValid {

    /**
     * Excel导入字段校验
     *
     * @param object 校验的JavaBean 其属性须有自定义注解
     * @author linmaosheng
     */
    public static void valid(Object object) {
        Field[] fields = object.getClass().getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            //属性的值
            Object fieldValue = null;
            try {
                fieldValue = field.get(object);
            } catch (IllegalAccessException e) {
                //BusinessException是我自定义的异常,这里需要
### 回答1: EasyExcel 是一个 Java 的读写 Excel 文件的开源库,它可以方便地实现 Excel 文件的读取、写入和操作。在 EasyExcel 中,校验字段可以通过添加注解来实现。 具体步骤如下: 1. 在需要校验的字段上添加注解 `@ExcelProperty`,并设置 `index` 属性表示该字段在 Excel 文件中的列位置。 ```java public class User { @ExcelProperty(index = 0) @NotBlank(message = "姓名不能为") private String name; @ExcelProperty(index = 1) @Pattern(regexp = "^\\d{11}$", message = "手机号格式不正确") private String phone; // 其他字段... } ``` 2. 在读取 Excel 文件时,使用 `EasyExcel.read()` 方法并传入一个 `AnalysisEventListener` 的实现类,重写 `onData()` 方法进行校验。 ```java public class UserExcelListener extends AnalysisEventListener<User> { private List<User> userList = new ArrayList<>(); @Override public void invoke(User user, AnalysisContext context) { // 数据校验 Set<ConstraintViolation<User>> violations = ValidatorUtil.validate(user); if (!violations.isEmpty()) { // 校验未通过,抛出异常 throw new RuntimeException(violations.iterator().next().getMessage()); } // 校验通过,加入列表 userList.add(user); } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 处理数据... } } ``` 在 `invoke()` 方法中,我们使用 `ValidatorUtil` 工具类对读取到的每一条数据进行校验。如果校验不通过,直接抛出异常,否则将数据加入列表。 需要注意的是,`ValidatorUtil` 是一个自定义的校验工具类,它使用了 JSR-303 标准中的注解进行校验。在使用之前需要先引入相关依赖和配置校验器。 ```xml <!-- 引入 Hibernate Validator 校验器 --> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.1.7.Final</version> </dependency> <!-- 配置校验器 --> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/> ``` 以上就是使用 EasyExcel 实现校验字段的步骤,希望对你有所帮助。 ### 回答2: EasyExcel 是一款方便易用的操作 Excel 文件的工具库,可以实现对 Excel 文件的读写操作。在 EasyExcel 中,校验字段是通过注解和校验器来实现的。 首先,在实体类的属性上添加校验注解,例如 @NotNull 表示非校验,@Max 表示最大值校验等等。这些注解可以根据具体需求进行选择和组合使用。 同时,根据需要,我们还可以自定义一些校验器来对字段进行额外的校验。自定义校验器需要实现 Validator 接口,并实现其中的 validate 方法,在该方法中编写具体的校验逻辑。 接下来,在读取或写入 Excel 文件时,使用 EasyExcel 提供的相关方法进行校验操作。在读取操作中,可以通过调用 ReadListener 的 onException 方法来获取校验不通过的数据和原因,并进行相应的处理。在写入操作中,可以在写入数据前进行校验,并将校验不通过的数据进行处理或记录。 总结来说,EasyExcel 校验字段的步骤如下: 1. 在实体类的属性上添加校验注解,标示字段的校验规则。 2. 可选:根据需要,自定义校验器对字段进行额外的校验。 3. 在读取或写入 Excel 文件时,使用 EasyExcel 提供的相关方法进行校验操作。 4. 根据校验结果进行相应的处理,如记录错误信息、筛选出不合规的数据等。 使用 EasyExcel 校验字段可以有效地保证数据的准确性和一致性,提高数据处理的效率和可靠性。同时,EasyExcel 提供了丰富的校验注解和灵活的扩展机制,方便根据实际需求进行定制化的校验规则。 ### 回答3: EasyExcel是一款开源的Java操作Excel的工具库,提供了丰富的API和功能,可以方便地进行Excel文件的读写操作。其中一项常用的功能是校验Excel文件中的字段。 EasyExcel的校验字段功能可以帮助用户在读取Excel文件时进行自定义的字段校验。具体使用步骤如下: 首先,用户需要定义一个校验的规则,并将其封装成一个校验器。校验规则可以包括字段的数据类型、长度、范围等,校验器需要实现EasyExcel的接口 "AbstractValidateResultCodeListener"。 其次,在读取Excel文件时,使用EasyExcel提供的 "ExcelReaderBuilder" 创建一个读取器,并将校验器传入该读取器中。 然后,使用读取器读取Excel文件,读取过程中,EasyExcel会根据校验规则对每个字段进行校验。 最后,根据校验结果进行相应的处理。EasyExcel读取Excel文件时,会将校验失败的数据进行记录,用户可以通过校验结果对象获取到校验失败的数据以及失败的原因,并进行后续操作,如打印出错误信息、记录日志等。 总之,EasyExcel提供了易于使用的校验字段功能,通过自定义校验规则,可以方便地对Excel文件中的字段进行校验,并获取校验结果,从而使数据处理更加准确和可靠。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值