private static String[] controllerName = {
};
public static void main (String[] args) throws ClassNotFoundException, IOException {
FileWriter file=new FileWriter("F://api.sql");
for (int i = 0; i < controllerName.length; ++i) {
Class clazz = Class.forName(controllerName[i]);
List<String> stringList=findOptLink(clazz);
stringList.forEach(x->{
try {
file.write(x);
} catch (IOException e) {
e.printStackTrace();
}
});
}
file.close();
}
/**
* 類 Api value tags
* RequestMapping value
* 類方法
* PostMapping value
* GetMapping value
* ApiOperator value
*
* @param obj
*/
private static List<String> findOptLink(Class<?> obj) {
List<String> stringlist=new LinkedList<>();
try {
System.out.println(1);
Method[] methods = obj.getMethods();
Annotation api = obj.getAnnotation(Api.class);
Annotation requestmapping = obj.getAnnotation(RequestMapping.class);
String path = "";
String desc = "";
if (api != null) {
// desc = dealAnnotation(api, "value");
desc = obj.getAnnotation(Api.class).tags()[0];
}
if (requestmapping != null) {
path += obj.getAnnotation(RequestMapping.class).value()[0];
}
for (int i = 0; i < methods.length; ++i) {
Method method = methods[i];
Annotation postMapping = method.getAnnotation(PostMapping.class);
Annotation getMapping = method.getAnnotation(GetMapping.class);
Annotation apiOperatior = method.getAnnotation(ApiOperation.class);
String tpath = "", tdesc = "", topt = "";
if (postMapping != null) {
tpath = method.getAnnotation(PostMapping.class).value()[0];
}
if (getMapping != null) {
tpath = method.getAnnotation(GetMapping.class).value()[0];
}
if (apiOperatior != null) {
tdesc = desc + dealAnnotation(apiOperatior, "value");
}
if (tpath.equals(""))
continue;
tpath = path + tpath;
String f = findOptKey(method.getName());
String b = findOptKey(tdesc);
if ("調用".equals(f))
topt = b;
else
topt = f;
if (StringUtils.isEmpty(tdesc))
tdesc="未定義模塊";
stringlist.add("insert into sys_opt_link (id,module,path,opt_type) values ('"+ UUID.randomUUID() +"','"+tdesc+"','"+tpath+"','"+topt+"');\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return stringlist;
}
public static String dealAnnotation(Annotation annotation, String valusName) throws NoSuchFieldException {
InvocationHandler invocationHandler = Proxy.getInvocationHandler(annotation);
Field annoField = invocationHandler.getClass().getDeclaredField("memberValues");
annoField.setAccessible(true);
try {
Map memberValues = (Map) annoField.get(invocationHandler);
System.out.println(memberValues);
return memberValues.get(valusName).toString();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return "";
}