记录一个校验对象为空/所有属性为空/null的工具类

版权声明:转载请注明原创 https://blog.csdn.net/qq_42151769/article/details/90932468

因为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;
	}

猜你喜欢

转载自blog.csdn.net/qq_42151769/article/details/90932468