脚本分享-打印Spring Mvc容器中的所有接口
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.lang.reflect.Method;
import java.util.Arrays;
/**
* 描述:打印spring mvc所有控制层接口
*
* @author Rabbiter
* @version 1.0
* @since 2020/11/10
*/
@Component
public class ListApi {
@Resource
ConfigurableApplicationContext run;
/**
* 打印spring mvc中的接口
*
* @return return value
*/
@Bean
public Object printApi() {
System.out.println("===== 开始打印 spring mvc 接口");
try {
//获取controller注解的bean名称
String[] beanNamesForAnnotation = run.getBeanNamesForAnnotation(RestController.class);
//获取类对象
for (String str : beanNamesForAnnotation) {
Object bean = run.getBean(str);
Class<?> controllerClazz = bean.getClass();
//获取requestmapping注解的类
RequestMapping requestMappingOnClazz = controllerClazz.getAnnotation(RequestMapping.class);
String urlPath = null;
String[] value = (requestMappingOnClazz == null || requestMappingOnClazz.value().length == 0
? new String[]{""} : requestMappingOnClazz.value());
//获取类的url路径
urlPath = value[0];
if (!"".equals(urlPath) && !"/".equals(urlPath.substring(0, 1))) {
//补充斜杠
urlPath = "/" + urlPath;
}
Method[] controllerMethods = controllerClazz.getDeclaredMethods();
for (Method method : controllerMethods) {
RequestMapping requestMapping = method.getAnnotation(RequestMapping.class);
GetMapping getMapping = method.getAnnotation(GetMapping.class);
PostMapping postMapping = method.getAnnotation(PostMapping.class);
if (getMapping != null) {
//GET方法
printGetMsg(urlPath, getMapping, controllerClazz, method);
} else if (postMapping != null) {
//POST方法
printPostMsg(urlPath, postMapping, controllerClazz, method);
} else if (requestMapping != null) {
//未指定方法
printUnknownMsg(urlPath, requestMapping, controllerClazz, method);
}
}
}
} catch (Exception e) {
e.printStackTrace();
System.err.println("===== 打印接口过程中出现异常,结束打印");
} finally {
System.out.println("===== spring mvc 接口打印结束");
}
return new Object();
}
/**
* 处理get接口
*
* @param urlPath 公共路径前缀
* @param getMapping 注解
* @param controllerClazz 接口所在controller的类对象
* @param method 接口所在方法对象
*/
private void printGetMsg(String urlPath, GetMapping getMapping, Class<?> controllerClazz, Method method) {
String[] urls = getMapping.value();
for (String url : urls) {
if (url.length() != 0 && !"/".equals(url.substring(0, 1))) {
//补充斜杠
url = "/" + url;
}
System.out.println(urlPath + url + " --- GET");
}
}
/**
* 处理post接口
*
* @param urlPath 公共路径前缀
* @param postMapping 注解
* @param controllerClazz 接口所在controller的类对象
* @param method 接口所在方法对象
*/
private void printPostMsg(String urlPath, PostMapping postMapping, Class<?> controllerClazz, Method method) {
String[] urls = postMapping.value();
for (String url : urls) {
if (url.length() != 0 && !"/".equals(url.substring(0, 1))) {
//补充斜杠
url = "/" + url;
}
System.out.println(urlPath + url + " --- POST");
}
}
/**
* 处理再requestMapping中指定的类型接口
*
* @param urlPath 公共路径前缀
* @param requestMapping 注解
* @param controllerClazz 接口所在controller的类对象
* @param method 接口所在方法对象
*/
private void printUnknownMsg(String urlPath, RequestMapping requestMapping, Class<?> controllerClazz, Method method) {
String[] urls = requestMapping.value();
for (String url : urls) {
if (url.length() != 0 && !"/".equals(url.substring(0, 1))) {
//补充斜杠
url = "/" + url;
}
System.out.println(urlPath + url + " --- " + Arrays.toString(requestMapping.method()));
}
}
}






0 条评论