问题

当对象实现序列化或者在controller的参数中被spring容器管理时,单纯判断null无效

原因:

因为已经不为空了

解决

利用反射编写一个工具类

  1. package com.yh.utils;
  2. import java.lang.reflect.Field;
  3. import java.lang.reflect.Type;
  4. /**
  5. * <p>Description: 判断对象是否为空,进一步判断对象中的属性是否都为空 </p>
  6. * @author yh
  7. * @date 2018年11月12日
  8. */
  9. public class CheckObjectIsNullUtils {
  10. /**
  11. * 判断对象是否为空,且对象的所有属性都为空
  12. * ps: boolean类型会有默认值false 判断结果不会为null 会影响判断结果
  13. * 序列化的默认值也会影响判断结果
  14. * @param object
  15. * @return
  16. */
  17. public static boolean objCheckIsNull(Object object){
  18. Class clazz = (Class)object.getClass(); // 得到类对象
  19. Field fields[] = clazz.getDeclaredFields(); // 得到所有属性
  20. boolean flag = true; //定义返回结果,默认为true
  21. for(Field field : fields){
  22. field.setAccessible(true);
  23. Object fieldValue = null;
  24. try {
  25. fieldValue = field.get(object); //得到属性值
  26. Type fieldType =field.getGenericType();//得到属性类型
  27. String fieldName = field.getName(); // 得到属性名
  28. System.out.println("属性类型:"+fieldType+",属性名:"+fieldName+",属性值:"+fieldValue);
  29. } catch (IllegalArgumentException e) {
  30. e.printStackTrace();
  31. } catch (IllegalAccessException e) {
  32. e.printStackTrace();
  33. }
  34. if(fieldValue != null){ //只要有一个属性值不为null 就返回false 表示对象不为null
  35. flag = false;
  36. break;
  37. }
  38. }
  39. return flag;
  40. }
  41. }