SpringBoot获取项目所有url路径和方法名
需求:在启动SpringBoot项目时查询出所有url路径和方法名存储到数据库表中
答案:
1.注入ConfigurableApplicationContext
@Autowired
ConfigurableApplicationContext run;
2.获取项目所有url,并生成sql
//获取项目所有url
public String getAllUrl(ConfigurableApplicationContext run) {
LOGGER.info("getUrlMethod is called.");
StringBuilder sbSql = new StringBuilder();
sbSql.append("INSERT INTO interfacelist (url,name,type)values");
//获取restcontroller注解的类名
String[] beanNamesForAnnotation = run.getBeanNamesForAnnotation(RestController.class);
//获取类对象
for (String str : beanNamesForAnnotation) {
Object bean = run.getBean(str);
Class<?> forName = bean.getClass();
System.out.println(forName.getName());
//获取requestmapping注解的类
RequestMapping declaredAnnotation = forName.getAnnotation(RequestMapping.class);
String url_path = "";
if (declaredAnnotation != null) {
String[] value = (declaredAnnotation.value());
//获取类的url路径
url_path = value[0];
for (Method method : forName.getDeclaredMethods()) {
RequestMapping annotation2 = method.getAnnotation(RequestMapping.class);
if (annotation2 != null) {
url_path += annotation2.value()[0];
System.out.println("方法路径" + url_path + "方法名" + method.getName());
sbSql.append("('").append(url_path).append("','").append(method.getName()).append("','").append("api'),");
}
url_path = value[0];
}
}
}
//删除字符串sbCols最后一个逗号
sbSql.deleteCharAt(sbSql.length() - 1);
System.out.println(sbSql);
return sbSql.toString();
}
3.插入数据库就ok啦!