通过反射获取注解的值和名字
public class ExcelImportValid {
/**
* Excel导入字段校验
* @param object 校验的JavaBean 其属性须有自定义注解
*/
public static String valid(Object object) throws Exception {
Field[] fields = object.getClass().getDeclaredFields();
String err="";
for (Field field : fields) {
//设置可访问
field.setAccessible(true);
//属性的值
Object fieldValue = null;
String[] fieldName=null;
try {
// 注解数值
fieldValue = field.get(object);
// 注解名字
if(field.isAnnotationPresent(ExcelProperty.class)){
fieldName= field.getDeclaredAnnotation(ExcelProperty.class).value();
}
} catch (IllegalAccessException e) {
throw new Exception(
field.getAnnotation(ExcelValid.class).message());
}
//是否包含必填校验注解
// 先判断必填是否为空,再判断类型
boolean isExcelValid = field.isAnnotationPresent(ExcelValid.class);
if (isExcelValid && Objects.isNull(fieldValue)) {
err=err.concat(field.getAnnotation(ExcelValid.class).message());
}
// 判断日期类型
if(field.isAnnotationPresent(DateTimeFormat.class)){
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
try{
Date date = formatter.parse((String) fieldValue);
}catch(Exception e){
err=err.concat(fieldName[0]+"日期格式错误");
}
}
}
if(err.length()>0){
return err;
}else{
return "true";
}
}
}