发表于: 2018-01-19 23:28:01

2 570


今天完成的事情:

1. 完成一个判空的工具

2.完成同步预习--课时列表接口


明天计划的事情

1.课时后台的增删改查



遇到的问题:

1. ListMap 无法传到后台:

原因,没有将写好的map传入List里面


2. jar包里的判空不严谨:

假设判断 “    ”   是否为空会判断为不为空,所以以不能这么判断,可这样:

public static boolean isNullOrEmpty(Object obj) {
return obj == null?true:"".equals(obj.toString().trim());

.trim()可以去除一个字符串头尾的空字符,这样就比较严谨。



收获:

1. 完成一个判空的工具

判空

1.  

简单参数的判空处理 , 例如入参为:StringLongint
*                      也可以是book.getName(),book.getId()
public static boolean isNullOrEmpty(Object...objects){
   log.info("简单类型的判断");
   if(objects.length ==0){
      throw new NullPointerException("objects  不能没有入参");
   }
   if(DataUtils.isNullOrEmpty(objects)){
       return true;
   }
   for(int i = 0;i<objects.length;i++){
      if(DataUtils.isNullOrEmpty( objects[i]) || DataUtils.isNullOrEmpty( objects[i].toString().trim())){
       log.info(" " + (i+1) + "个参数为空: " + objects[i]);
           return true;
       }
   }
   return false;

}

入参可以不确定数目,通过判空和确定入参数组的长度来判断有没有入参数,或者参数是否为null 或 “”


2. 

/**
* List<简单类型> 的判空 ,例如List<String> List<Long>
* @param object
* @return
*/
public static boolean isListNullOrEmpty(Object object) {
   log.info("List<简单类型>的判断");
   if(DataUtils.isNullOrEmpty(object)){
      return true;
   }
   ArrayList objectList=null;
   if(object instanceof  List){
       objectList = new ArrayList();
       objectList.addAll(((List) object));
   }else {
       throw new ClassCastException("参数不是List<简单类型>");
   }
  if(objectList.size() == 0){
        return true;
   }
   for (int k = 0; k<objectList.size(); k++){
        if (DataUtils.isNullOrEmpty(objectList.get(k)) || DataUtils.isNullOrEmpty(objectList.get(k).toString().trim())) {
        log.info("List[" + k + "]:  参数为空!!!");
         return true;
       }
   }
   return false;
}


判断Objiect是否为List的父类,如果是就转换,如果不是抛出类型转换异常,然后挨个判断其中的参数是否为空



3. 

/**
* List<model>model 自定义方法返回值的判空,暂不能为List<Map>
* 入参为:bookList"要执行的方法名1""要执行的方法名2"
* 例如:isListNullOrEmpty(bookList,"getName","getId")
* @param object
* @param methodNames
* @return
*/


主要看3:

public static boolean isListNullOrEmpty(Object object, String...methodNames) {
   log.info("List<自定义类型>的判断");
   if(DataUtils.isNullOrEmpty(methodNames) || methodNames.length == 0){
         throw new NoSuchMethodError("methodNames  方法名不能为空");
   }
   for(String methodName: methodNames){
      if(DataUtils.isNullOrEmpty(methodName) || DataUtils.isNullOrEmpty(methodName.trim())){
           throw new NoSuchMethodError("methodNames  方法名不能为空");
       }
   }
   if(DataUtils.isNullOrEmpty(object)){
       return true;
   }
   ArrayList objectList=null;
   if(object instanceof  List){
       objectList = new ArrayList();
       objectList.addAll(((List) object));
   }else {
       throw new ClassCastException(" object 参数不是List<自定义类>");
   }
  if(0 == objectList.size()){
       return true;
   }
   Method method = null;
   Object value = null;
   String methodName = null;
   try {
        for (int k = 0;k<objectList.size();k++) {
           Object o = objectList.get(k);
           Class clazz = o.getClass();
           for (int i = 0;i<methodNames.length ;i++) {
               methodName = methodNames[i];
               method = clazz.getDeclaredMethod(methodName.trim());
               value = method.invoke(o);
               if (DataUtils.isNullOrEmpty(value) || DataUtils.isNullOrEmpty(value.toString().trim())) {
               log.info("List[" + k + "] : " + methodName + "执行为空!!!");
                   return true;
               }
           }
        }
    }catch (NoSuchMethodException e){
       log.error("该方法不存在 " + methodName);
       log.error(e);
       e.printStackTrace();
       return true;
   }catch (InvocationTargetException |IllegalAccessException e){
       log.error("无法执行该方法: " + methodName);
       log.error(e);
       e.printStackTrace();
       return true;
   }
    return false;
}


通过反射获取List<Object>里的Object类的相关信息,通过反射和传入的methodName 方法名执行get方法,

method = clazz.getDeclaredMethod(methodName.trim()); // 获取方法名为 mehodName  的相关信息
value = method.invoke(o); //执行该方法

然后判断get方法的返回值是否为空,




课时列表,课时后台简单增删改查

预计完成时间:1.20

DOME时间:2018-2-9



返回列表 返回列表
评论

    分享到