通用接口使用概述
token为login以后返回的登录信息,每次调用新的接口都需要使用登录后的token
stringHashMap记录了访问接口的命令和接口名称的关联的键值对,后续有详细使用介绍。
private static String baseUrl = "https://192.168.32.77"; private static String token; private static HashMap<String, String> stringHashMap = new HashMap<String, String>();
main函数的成员变量需要修改成此次需要访问环境的IP地址。这里IP地址https://192.168.32.77仅为格式举例
主函数调用四个基础接口,initSeesionId, login, changeSeesionId 和 callMethodByName.
前三个接口分别为3.3小节登录认证的请求会话ID, 登录Login 和 改变SessionId 三个模块 , 第四个接口为反射方法, 通过反射调用Main中对应的函数接口。
每一个接口使用前都必须有initSeesionId和login的操作。
/**
* 主函数入口
*
* @param args 用户输入的参数
*/
public static void main(String[] args) {
args = new String[]{"WEB_CallSiteAPI","api","Change_Me"};
if(args.length<=2){
return;
}
initSeesionId();
token = login(HttpClientUtil.sessionId, args);
if (TextUtils.isEmpty(token)) {
systemPrint("login failed");
return;
}
changeSeesionId();
callMethodByName(args);
}
callMethodByName 内容如下,参数args中带有了需要访问的method名称,所有的method需要在Main的成员变量stringHashMap中。
以访问LogOut方法举例说明如下,args中带有Method参数名Logout, 则for循环中遍历stringHashMap中的所有键值对,找到LogOut中对应的Main
的成员函数名称为LogOut. 下面则是一系列反射操作,先通过路径com.device.terminal.Main获取类对象。
Method mth = obj.getClass().getDeclaredMethod(methodName, String[].class);//为需要被反射的方法,可以有参数可以无参数。 mth.invoke(obj, (Object) args);//为调用反射方法的调用逻辑。
/**
* 通过参数找到方法 通过方法名调用方法
*
* @param args 用户输入的参数
*/
private static void callMethodByName(String[] args) {
if (!(args.length == 3 || args.length == 4)) {
systemPrint("Parameter error");
return;
}
String methodName = null;
for (String key : stringHashMap.keySet()) {
if (key.contains(args[0])) {
methodName = stringHashMap.get(key);
}
}
if (TextUtils.isEmpty(methodName)) {
systemPrint("Parameter error");
return;
}
try {
Class clz = Class.forName("com.device.terminal.Main");
Object obj = clz.newInstance();
if (args.length == 3) {
// 获取无参方法
Method mth = obj.getClass().getDeclaredMethod(methodName);
mth.invoke(obj);
} else if (args.length == 4) {
// 获取有参方法
Method mth = obj.getClass().getDeclaredMethod(methodName, String[].class);
}
} catch (Exception e) {
systemPrint("Parameter error");
}
}
stringHashMap
private static HashMap<String, String> stringHashMap = new HashMap<String, String>();
static {
stringHashMap.put("WEB_CallSiteAPI", "WEB_CallSiteAPI");
stringHashMap.put("CancelCallAPI", "CancelCallAPI");
stringHashMap.put("Logout", "Logout");
stringHashMap.put("WEB_ScheduleConfAPI", "WEB_ScheduleConfAPI");
stringHashMap.put("BaseMess", "BaseMess");
}
由此,调用一个通用接口的使用方法总结如下。
- 修改main函数中args = new String[] {"","",""}中的调用命令。
- 添加一个被调用成员函数,在其中写函数接口。
- 在stringHashMap中新增一个键值对。键需要和main函数中的args = new String[] {"","",""} 的第一个参数保持一致,值需要与被调用成员函数的名称保持一致。