注解 - Excel 校验工具
注解类:
@Retention(RetentionPolicy.RUNTIME)
public @interface ExcelValidate
{
public boolean ignoreBlank() default false; public int max() default Integer.MAX_VALUE; public int min() default 0; public boolean notNull() default false; public String format() default "";
}
被注解类:
public class ExcelAssetsBusinessVO {
@ExcelValidate(notNull=true,max=100)
private String name;
@ExcelValidate(notNull=true)
private String ip;
private String port;
}
注解解析工具:
public class ExcelValidateUtil {
public static <E> List<String> check(List<E> list, int index) throws Exception {
List<String> strList = new ArrayList<>();
Iterator<E> it = list.iterator();
int i = 0;
while(it.hasNext()) {
int offset = i + index;
E e = it.next();
Field[] fields = e.getClass().getDeclaredFields();
//对excel中的空行进行校验
int count = 0, step = 0;
ExcelValidate excelValidateClass = e.getClass().getAnnotation(ExcelValidate.class);
if (excelValidateClass.ignoreBlank()) {
for (Field field : fields) {
count++;
field.setAccessible(true);
if (field.get(e) == null || StringUtils.isBlank(field.get(e).toString())) {
step++;
}
}
}
if (count == step) {
it.remove();
continue;
}
for (Field field : fields) {
field.setAccessible(true);
if (field.isAnnotationPresent(ExcelValidate.class)) {
ExcelValidate excelValidate = field.getAnnotation(ExcelValidate.class);
ExcelField excelField = field.getAnnotation(ExcelField.class);
if (excelValidate.notNull()) {
if (field.get(e) == null || field.get(e).toString().trim().length() == 0) {
String str = "第" + offset + "行," + excelField.title().substring(0, excelField.title().length()-1) + "不能为空!";
strList.add(str);
continue;
}
}
if (excelValidate.max() != Integer.MAX_VALUE) {
if (field.get(e)!=null && field.get(e).toString().length() > excelValidate.max()) {
String str = "";
if(excelField.title().endsWith("*")) {
str = "第" + offset + "行," + excelField.title().substring(0, excelField.title().length()-1) + "不能超过" + excelValidate.max() + "字符!";
}else {
str = "第" + offset + "行," + excelField.title() + "不能超过" + excelValidate.max() + "字符!";
}
strList.add(str);
continue;
}
}
if (excelValidate.min() != 0) {
if (field.get(e)!=null && field.get(e).toString().length() < excelValidate.min()) {
String str = "";
if(excelField.title().endsWith("*")) {
str = "第" + offset + "行," + excelField.title().substring(0, excelField.title().length()-1) + "不能少于" + excelValidate.max() + "字符!";
}else {
str = "第" + offset + "行," + excelField.title() + "不能少于" + excelValidate.max() + "字符!";
}
strList.add(str);
continue;
}
}
if (field.get(e)!=null && !"".equals(excelValidate.format())) {
boolean valid = Pattern.matches(excelValidate.format(), field.get(e).toString());
if (!valid) {
String str = "";
if(excelField.title().endsWith("*")) {
str = "第" + offset + "行," + excelField.title().substring(0, excelField.title().length()-1) + "格式不正确!";
} else {
str = "第" + offset + "行," + excelField.title() + "格式不正确!";
}
strList.add(str);
continue;
}
}
}
}
i++;
}
return strList;
}
}
注解 - Excel 校验工具的更多相关文章
- Excel解析工具easyexcel全面探索
1. Excel解析工具easyexcel全面探索 1.1. 简介 之前我们想到Excel解析一般是使用POI,但POI存在一个严重的问题,就是非常消耗内存.所以阿里人员对它进行了重写从而诞生了eas ...
- 使用Apache poi来编写导出excel的工具类
在JavaWeb开发的需求中,我们会经常看到导出excel的功能需求,然后java并没有提供操作office文档的功能,这个时候我们就需要使用额外的组件来帮助我们完成这项功能了. 很高兴Apache基 ...
- Manifesto – HTML5 离线应用程序缓存校验工具
Manifesto 是一个 HTML5 离线应用程序缓存校验工具,提供了快速校验 HTML5 manifest 文件有效性的方法.离线应用程序缓存在使用中最困难的部分之一就是无法正常工作的时候没有明显 ...
- ESLint – 可扩展的 JavaScript & JSX 校验工具
ESLint 是一个开源的 JavaScript 代码校验工具,最初是由 Nicholas C. Zakas 在2013年创建的.经常被用来发现问题的模式或代码,不符合特定的风格准则. ESLint ...
- 基于jdk1.7实现的excel导出工具类
通用excel导出工具类,基于泛型.反射.hashmap 以及基于泛型.反射.bean两种方式 import java.io.*;import java.lang.reflect.Field;impo ...
- excel读取 工具类
package cn.yongche.utils; import java.io.File; import java.io.FileInputStream; import java.io.IOExce ...
- Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类
Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...
- Java对象和Excel转换工具XXL-EXCEL
<Java对象和Excel转换工具XXL-EXCEL> 一.简介 1.1 概述 XXL-EXCEL 是一个灵活的Java对象和Excel文档相互转换的工具. 一行代码完成Java对象和Ex ...
- Excel导入工具类兼容xls和xlsx
package com.bj58.finance.platform.operation.provider.util; import org.apache.log4j.Logger; import or ...
随机推荐
- mybatis 源码分析二
1.SqlSession下的四大对象 Executor.StatementHandler.ParameterHandler.ResultSetHandler StatementHandler的作用是使 ...
- AJ的笔记之上拉电阻的工作原理分析
第二章:聊一聊上拉电阻的工作原理 **********本文所采用的单片机是:STC89C52RC系******************** [重点提要]其实,理解上拉电阻的原理,关键是理解这两个词:锁 ...
- Linux装系统问题
最近要把以前的Linux red hat 5.3,32位的系统换成Linux red hat6.2 64位系统,中间出现问题,不知道为什么系统装完之后回滚,还是之前的5.3.,为此纠结好久,终于找到问 ...
- for循环比较
在实际的开发过程中,一般都会用到for循环,都可以用来遍历,但是这几个之间又存在细微的差别! 一,传统的for循环: var arr = ['good', 'good', 'study']; for ...
- Mac os 下brew的安装与使用—— Homebrew
1.简介 brew 全称Homebrew 是Mac OSX上的软件包管理工具,相当于linux下的apt-get. 2.安装 2.1安装ruby工具 2.1.1 ruby简介 2.1.2 检查rub ...
- frag
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android=&qu ...
- 认识Ajax
1.简介 AJAX 相当于异步 JavaScript 和 XML,是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网 ...
- 设计模式—模板方法(template method)
一.定义 百度百科给的定义:定义一个操作中的算法骨架(稳定),而将一些步骤延迟到子类中(变化).Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 如何做到 ...
- Privoxy代理的使用
目录 1. Privoxy介绍 1.1 安装 1.2 配置 1.3 使用 1.4 其他配置 1.5 测试链接及查看配置 2. 相关信息 https://www.privoxy.org/ http:// ...
- Python 斗地主发牌
#coding = utf-8 import random def Creat_Card(): card_type = ['♥','♠','♦','♣'] card_values= ['A', '2' ...