通用接口使用概述
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[] {"","",""} 的第一个参数保持一致,值需要与被调用成员函数的名称保持一致。