对于检测实体类上的属性,有注解的进行验证判断当前字段是否为空的情况。
通过反射方式获取类属性上的注解。
public static <T> void get(Object object,Class<? extends Annotation>... annotations){
if (annotations.length <0){
annotations = new Class[]{Length.class, Range.class, NotBlank.class, NotNull.class, NotEmpty.class};
}
Field[] declaredFields = object.getClass().getDeclaredFields();
for (Field declaredField : declaredFields) {
try {
Object fileValue = declaredField.get(object);
List<? extends Annotation> collect = Arrays.stream(annotations).filter(Objects::nonNull).map(age -> {
if (declaredField.isAnnotationPresent(age)) {
return declaredField.getAnnotation(age);
}
return null;
}).filter(Objects::nonNull).collect(Collectors.toList());
for (Annotation annotation : collect) {
if (annotation instanceof NotEmpty){
NotEmpty notEmpty = (NotEmpty) annotation;
if (null == fileValue){
throw new BusinessException(notEmpty.message());
}
}
if (annotation instanceof NotBlank){
NotBlank notBlank = (NotBlank) annotation;
if (fileValue instanceof List && CollectionUtils.isEmpty((Collection) fileValue){
throw new BusinessException(notBlank.message());
}
if (fileValue instanceof Map && MapUtils.isEmpty((Map) fileValue)){
throw new BusinessException(notBlank.message());
}
if (fileValue instanceof String && StringUtils.isEmpty(fileValue)){
throw new BusinessException(notBlank.message());
}
if (fileValue.getClass().isArray() && Array.getLength(fileValue) <0){
throw new BusinessException(notBlank.message());
}
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}