发表于: 2018-01-19 23:28:01
2 571
今天完成的事情:
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.
简单参数的判空处理 , 例如入参为:String,Long,int。
* 也可以是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
评论