后台接口实现反射的方法
public boolean dataValidation(Object o) {
Class<ExampleValidator> exmVal = ExampleValidator.class;
try {
Object object = exmVal.newInstance();
/*
* 获取validator中所有的方法的方法名放入此List中。
*/
Method[] methods = exmVal.getDeclaredMethods();
List<String> valMethod = new ArrayList<>();
for (int i = 0; i < methods.length; i++) {
valMethod.add(methods[i].getName());
}
/*
* 将需要调用的方法添加的到此List中
*/
List<String> calMethods = new ArrayList<String>();
calMethods.add("methodChk1");
calMethods.add("methodChk2");
calMethods.add("methodChk3");
calMethods.add("methodChk4");
// TODO : 此处添加新的校验方法名
int i = 1;
for (String exeMethod : calMethods) {
if (valMethod.contains(exeMethod)) {
/* 通过方法名和入参类型 获取方法 */
Method method = exmVal.getMethod(exeMethod, new Class[]{String.class});
/* 定义入参, 一般由调用此方法入口传入 */
Object[] params = new Object[]{"param" + (i++)};
System.out.println(exeMethod + "validate begin...");
Boolean noPass = (Boolean) method.invoke(object, params);
//此处可以打日志,记录那个方法通过,那个方法失败。
if (!noPass) {
System.err.println(exeMethod + "validate fail...Nopass");
//校验不同过, no pass
return false;
}
System.out.println(exeMethod + "validate end...pass");
}
}
}
catch (Exception e) {
e.printStackTrace();
}
return true;
}
public class ExampleValidator {
/**
* Description: validate methods <br>
*
* @author zhang.yangm<br>
* @taskId <br>
* @param o
* @return <br>
*/
public boolean methodChk1(String s) {
System.out.println("methodChk1 pass, param is :" + s);
return true;
}
public boolean methodChk2(String s) {
System.out.println("methodChk2 pass, param is :" + s);
return true;
}
public boolean methodChk3(String s) {
System.out.println("methodChk3 pass, param is :" + s);
return true;
}
public boolean methodChk4(String s) {
System.out.println("methodChk4 pass, param is :" + s);
return false;
}
public boolean methodChk5(String s) {
System.out.println("methodChk5 pass, param is :" + s);
return false;
}
}
校验类,校验方法都在这个里面,如果校验失败就返回false或者自定义。
比如,自定义一个枚举类,返回一个错误码。
结果:
因篇幅问题不能全部显示,请点此查看更多更全内容