在实际项目中,遇到了导入数据校验是否为空的情况,只使用Javax的@NotBlank注解并没有什么用,还需要使用工具类校验,具体代码如下:
-
- import com.alibaba.excel.annotation.ExcelIgnore;
- import com.alibaba.excel.annotation.ExcelProperty;
- import com.alibaba.excel.annotation.write.style.ColumnWidth;
- import com.alibaba.excel.annotation.write.style.ContentRowHeight;
- import com.alibaba.excel.annotation.write.style.HeadFontStyle;
- import com.alibaba.excel.annotation.write.style.HeadRowHeight;
- import lombok.Data;
- import org.apache.poi.ss.usermodel.Font;
-
- import javax.validation.constraints.NotBlank;
- import java.io.Serializable;
-
-
- @Data
- @ColumnWidth(25)
- @HeadRowHeight(20)
- @ContentRowHeight(18)
- public class ExcelData implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
- @NotBlank(message = "类型不能为空")
- @HeadFontStyle(color = Font.COLOR_RED)
- @ExcelProperty(value = "类型")
- private String type;
-
- @NotBlank(message = "编号不能为空")
- @HeadFontStyle(color = Font.COLOR_RED)
- @ExcelProperty(value = "编号")
- private String code;
-
- @HeadFontStyle(color = Font.COLOR_NORMAL)
- @ExcelProperty(value = "备注")
- private String comment;
-
- @ExcelIgnore
- private Long typeId;
-
-
- }
-
- import javax.validation.constraints.NotBlank;
- import java.lang.reflect.Field;
- import java.util.Objects;
-
-
- public class ValidationUtils {
- public static boolean isNotBlankFields(Object object) {
- Field[] fields = object.getClass().getDeclaredFields();
- for (Field field : fields) {
- if (field.isAnnotationPresent(NotBlank.class)) {
- field.setAccessible(true);
- try {
- Object value = field.get(object);
- if (Objects.isNull(value) || value.toString().trim().isEmpty()) {
- return false;
- }
- } catch (IllegalAccessException e) {
- // 异常处理
- }
- }
- }
- return true;
- }
- }
- List
excelDataList = new ArrayList<>(); - // list数据添加逻辑 ……
-
- // 空数据校验
- boolean allFieldsNotBlank = excelDataList.stream().allMatch(ValidationUtils::isNotBlankFields);
-
- if (!allFieldsNotBlank) {
- // 有空数据时的处理
- }
通过调用就可以校验标注@NotBlank注解的属性值是否为空了。