Springboot项目如何获取所有的接口
Springboot项目获取所有接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
@Autowired private WebApplicationContext applicationContext; @Override public List getAllUrl() { RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping. class ); // 获取url与类和方法的对应信息 Map<RequestMappingInfo, HandlerMethod> map = mapping.getHandlerMethods(); List<Map<String, String>> list = new ArrayList<Map<String, String>>(); for (Map.Entry<RequestMappingInfo, HandlerMethod> m : map.entrySet()) { Map<String, String> map1 = new HashMap<String, String>(); RequestMappingInfo info = m.getKey(); HandlerMethod method = m.getValue(); //获取当前方法所在类名 Class<?> bean = method.getBeanType(); //使用反射获取当前类注解内容 Api api = bean.getAnnotation(Api. class ); RequestMapping requestMapping = bean.getAnnotation(RequestMapping. class ); String[] value = requestMapping.value(); map1.put( "parent" ,value[ 0 ]) //获取方法上注解以及注解值 ApiOperation methodAnnotation = method.getMethodAnnotation(ApiOperation. class ); String privilegeName = methodAnnotation.notes(); PatternsRequestCondition p = info.getPatternsCondition(); for (String url : p.getPatterns()) { map1.put( "url" , url); } map1.put( "className" , method.getMethod().getDeclaringClass().getName()); // 类名 map1.put( "method" , method.getMethod().getName()); // 方法名 RequestMethodsRequestCondition methodsCondition = info.getMethodsCondition(); for (RequestMethod requestMethod : methodsCondition.getMethods()) { map1.put( "type" , requestMethod.toString()); } list.add(map1); } return list; } |
获取项目下所有http接口的信息
一、接口信息类
新建一个类用于存放http接口的相关信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
class RequestToMethodItem { public String controllerName; public String methodName; public String requestType; public String requestUrl; public Class<?>[] methodParmaTypes; public String getControllerName() { return controllerName; } public void setControllerName(String controllerName) { this .controllerName = controllerName; } public String getMethodName() { return methodName; } public void setMethodName(String methodName) { this .methodName = methodName; } public String getRequestType() { return requestType; } public void setRequestType(String requestType) { this .requestType = requestType; } public String getRequestUrl() { return requestUrl; } public void setRequestUrl(String requestUrl) { this .requestUrl = requestUrl; } public Class<?>[] getMethodParmaTypes() { return methodParmaTypes; } public void setMethodParmaTypes(Class<?>[] methodParmaTypes) { this .methodParmaTypes = methodParmaTypes; } public RequestToMethodItem(String requestUrl, String requestType, String controllerName, String requestMethodName, Class<?>[] methodParmaTypes){ this .requestUrl = requestUrl; this .requestType = requestType; this .controllerName = controllerName; this .methodName = requestMethodName; this .methodParmaTypes = methodParmaTypes; } } |
二、单元测试
写两个http接口用于测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class TestController { @GetMapping (value = "/test1" ) @ResponseBody public void test1(Integer a) { } @PostMapping (value = "/test2" ) @ResponseBody public void test2(Integer a,Integer b) { } } |
测试单元
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
import java.util.ArrayList; import java.util.List; import java.util.Map; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition; import org.springframework.web.servlet.mvc.condition.RequestMethodsRequestCondition; import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; import cn.hutool.json.JSONUtil; //hutool是一个很方便的工具包 @SpringBootTest @RunWith (SpringRunner. class ) public class Test { @Autowired WebApplicationContext applicationContext; @org .junit.Test public void index() { List<RequestToMethodItem> requestToMethodItemList = new ArrayList<RequestToMethodItem>(); RequestMappingHandlerMapping requestMappingHandlerMapping = applicationContext.getBean(RequestMappingHandlerMapping. class ); Map<RequestMappingInfo, HandlerMethod> handlerMethods = requestMappingHandlerMapping.getHandlerMethods(); for (Map.Entry<RequestMappingInfo, HandlerMethod> requestMappingInfoHandlerMethodEntry : handlerMethods .entrySet()) { RequestMappingInfo requestMappingInfo = requestMappingInfoHandlerMethodEntry.getKey(); RequestMethodsRequestCondition methodCondition = requestMappingInfo.getMethodsCondition(); PatternsRequestCondition patternsCondition = requestMappingInfo.getPatternsCondition(); HandlerMethod mappingInfoValue = requestMappingInfoHandlerMethodEntry.getValue(); // 请求类型 String requestType = methodCondition.getMethods().toString(); // 请求路径 String requestUrl = patternsCondition.getPatterns().iterator().next(); // 控制器名称 String controllerName = mappingInfoValue.getBeanType().toString(); // 请求方法名 String requestMethodName = mappingInfoValue.getMethod().getName(); // 请求参数 Class<?>[] methodParamTypes = mappingInfoValue.getMethod().getParameterTypes(); // Spring通过BasicErrorController进行统一的异常处理,不计入这些API if ( "class org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController" .equals(controllerName)) { continue ; } RequestToMethodItem item = new RequestToMethodItem(requestUrl, requestType, controllerName, requestMethodName, methodParamTypes); requestToMethodItemList.add(item); } System.out.println(JSONUtil.toJsonStr(requestToMethodItemList)); } } |
测试结果
摘抄自网络,便于检索查找。