使用了jdk1.8的Optional;
然后就是通过反射去看字段是否有值;
flag=true,则过滤掉需要排除的字段,对其余的字段进行判空;flag=false,仅传递过来的字段进行判空,对其余的字段进行过滤
/**
* 所有的字段当中需要排除的字段过滤下来需要过滤的字段
* @param obj
* @param flag
* @param excludeFiledList
* @return
*/
public Map checkParams(Object obj,boolean flag, Object... excludeFiledList) {
/**flag=true,则过滤掉需要排除的字段,对其余的字段进行判空;flag=false,仅传递过来的字段进行判空,对其余的字段进行过滤 */
List excludeFileds = Arrays.asList(excludeFiledList);
Map<String,Object> respParams=new HashMap<String,Object>();
try{
if(Optional.ofNullable(excludeFileds).isPresent() && excludeFileds.size()>0){
Class c = obj.getClass();
Field[] fields = c.getDeclaredFields();
List<Field> needFilterFields = new ArrayList<Field>();
if(flag) {
/**过滤掉需要排除的字段,对其余字段进行判空*/
for (Field field : fields) {
if (excludeFileds.indexOf(field.getName()) == -1) {
needFilterFields.add(field);
}
}
}else{
/**对传递过来的字段进行判空,其余字段过滤排除*/
for (Object fieldName : excludeFileds) {
needFilterFields.add(c.getDeclaredField(fieldName.toString()));
}
}
if(needFilterFields.size()>0){
for (Field field : needFilterFields) {
field.setAccessible(true);
Method method = c.getMethod(("get" + (field.getName().substring(0, 1).toUpperCase()) + (field.getName().substring(1, field.getName().length()))));
Object value = method.invoke(obj);
if (!Optional.ofNullable(value).isPresent()) {
respParams.put("code", ResultCode.PARAMS_IS_EMPTY);
respParams.put("respCode", "failure");
respParams.put("respMsg", "上送" + field.getName() + "为空,请检查参数并重新上送");
return respParams;
}
}
respParams.put("respCode", "success");
}else{
respParams.put("respCode", "success");
}
}else{
respParams.put("respCode", "success");
}
}catch (NoSuchMethodException e){
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
return respParams;
}
调用
/**
jdk 8 Optional运用
*/
@org.junit.Test
public void testReadPropertiesFile() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
// String tUserAddress="tUserAddress";
// System.out.println(Optional.ofNullable(tUserAddress).orElseGet(()->"tUserAddress为空"));
// TUserAddress tUserAddress=null;
// System.out.println(Optional.ofNullable(tUserAddress).isPresent());
//排除哪一个字段不需要判空,其他字段需要判空处理
TUserAddress tUserAddress=new TUserAddress();
// tUserAddress.setUserId(1);
// tUserAddress.setZipCode("tset");
// tUserAddress.setAddress2("09088734234234");
// tUserAddress.setAddress1("rwerwerwerwer");
// Map resp= checkParams(tUserAddress,true,"lastUpdateBy","createDate","lastUpdateDate","address2","id");
// Map resp= checkParams(tUserAddress,false,"id");
// System.out.println(resp.get("respCode")+" "+resp.get("respMsg"));
// List<String> list=new ArrayList<String>();
// list.add("userId");
System.out.println(checkParams(tUserAddress, true ,"lastUpdateBy","createDate","lastUpdateDate","address2","id"));
}