问题
当对象实现序列化或者在controller的参数中被spring容器管理时,单纯判断null无效
原因:
解决
利用反射编写一个工具类
package com.yh.utils;import java.lang.reflect.Field;import java.lang.reflect.Type;/*** <p>Description: 判断对象是否为空,进一步判断对象中的属性是否都为空 </p>* @author yh* @date 2018年11月12日*/public class CheckObjectIsNullUtils {/*** 判断对象是否为空,且对象的所有属性都为空* ps: boolean类型会有默认值false 判断结果不会为null 会影响判断结果* 序列化的默认值也会影响判断结果* @param object* @return*/public static boolean objCheckIsNull(Object object){Class clazz = (Class)object.getClass(); // 得到类对象Field fields[] = clazz.getDeclaredFields(); // 得到所有属性boolean flag = true; //定义返回结果,默认为truefor(Field field : fields){field.setAccessible(true);Object fieldValue = null;try {fieldValue = field.get(object); //得到属性值Type fieldType =field.getGenericType();//得到属性类型String fieldName = field.getName(); // 得到属性名System.out.println("属性类型:"+fieldType+",属性名:"+fieldName+",属性值:"+fieldValue);} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}if(fieldValue != null){ //只要有一个属性值不为null 就返回false 表示对象不为nullflag = false;break;}}return flag;}}
