记录一个校验对象为空/所有属性为空/null的工具类
程序员文章站
2022-06-05 07:58:11
...
因为boolean类型会有默认为false,所以,在校验对象的时候跳过了为false的字段校验,也就是如果为false默认校验改字段为空
package com.t3.ts.driver.resume.utils;
import com.t3.ts.driver.resume.utils.excel.FieldReflectionUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Collection;
import java.util.Map;
/**
* @Description:
* @Date: 2019/6/5
* @Auther: wm yu
*/
public class ObjectCheckUtil {
private static final Logger log = LoggerFactory.getLogger(ObjectCheckUtil.class);
/**
* 传入对象,检查对象是否为null或者所有的属性为空/null,不校验boolean类型为false的情况
* @return
*/
public static boolean checkNullAndEmpty(Object obj){
if(null == obj){
return true;
}else if (obj instanceof CharSequence){
return ((CharSequence) obj).length() == 0;
}
else if (obj instanceof Collection){
return ((Collection) obj).isEmpty();
}
else if (obj instanceof Map){
return ((Map) obj).isEmpty();
}
else if (obj.getClass().isArray()) {
return Array.getLength(obj) == 0;
}
Class<?> clzz = obj.getClass();
Field[] allFields = FieldReflectionUtil.getAllFields(clzz);
for (Field field : allFields) {
if(Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers()) || Modifier.isAbstract(field.getModifiers())){
continue;
}
if(!field.isAccessible()){
field.setAccessible(true);
}
try {
Object o = field.get(obj);
//处理String,排除空字符串
if(o instanceof String){
if(StringUtils.isNotEmpty((String) o)){
return false;
}
}
if(o instanceof Boolean){
//boolean类型且默认为true
if((Boolean) o){
return false;
}
continue;
}
if(o != null){
return false;
}
if(o instanceof Collection){
if(!((Collection) obj).isEmpty()){
return false;
}
}
if(o instanceof Map){
if(!((Map) obj).isEmpty()){
return false;
}
}
if(o != null && o.getClass().isArray() ){
if(Array.getLength(obj) > 0){
return false;
}
}
} catch (IllegalAccessException e) {
log.error("get obj by reflect error{}:",field.getName(),e);
}
}
return true;
}
}
依赖一个反射获取所有字段的工具类,如下:
public static Field[] getAllFields(Class c){
List<Field> fieldList = new ArrayList<>();
while (c!= null){
fieldList.addAll(new ArrayList<>(Arrays.asList(c.getDeclaredFields())));
c= c.getSuperclass();
}
Field[] fields = new Field[fieldList.size()];
fieldList.toArray(fields);
return fields;
}