自己写的参数校验工具类,使用场景于多个controller下用了同一个bean去接收,这时候使用@notNull不是很现实,POST下ID理论是为undefined,而PUT则不是。
可根据需要在这工具类上修改
/**
* 表单参数校验 代替统一校验@NotNull 递归校验
* 事务回滚在外部方法处理
* 这里抛出ParamException丢给全局处理,代替返回结果
* @author q_y_h
* @param data
* @param params 需要校验的参数
* @return
*/
public static <T> void allParamValid(T data, String... params) {
for (int i = 0; i < params.length; i++) {
String param = params[i];
if (!paramValid(data.getClass(), data, param))
throw new ParamException("参数缺失");
}
}
public static<T> boolean paramValid(Class<?> thisClass,T data, String property) {
boolean hasParam = false;
Class<?> superclass = thisClass.getSuperclass();
Field field = null;
try {
field = thisClass.getDeclaredField(property);
field.setAccessible(true);
Object param = field.get(data);
hasParam = (param != null);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
if (superclass != null)
return paramValid(superclass, data, property);
else throw new ParamException("未找到校验参数:"+property+"\r\n");
}finally {
if (field != null)
field.setAccessible(false);
}
//第一级时返回
return hasParam;
}
public static void main(String[] args) {
allParamValid(new SysUser(),"id","xxx","xxx");
}