Springboot项目如何获取所有的接口

网友投稿 651 2022-09-28


Springboot项目如何获取所有的接口

目录Springboot项目获取所有接口获取项目下所有http接口的信息一、接口信息类二、单元测试

Springboot项目获取所有接口

@Autowired

private WebApplicationContext applicationContext;

@Override

public List getAllUrl() {

RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class);

// 获取url与类和方法的对应信息

Map map = mapping.getHandlerMethods();

List> list = new ArrayList>();

for (Map.Entry m : map.entrySet()) {

Map map1 = new HashMap();

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接口的相关信息

class RequestToMethoZsxIiKdItem {

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接口用于测试

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) {

}

}

测ZsxIiK试单元

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 requestToMethodItemList = new ArrayList();

RequestMappingHandlerMapping requestMappingHandlerMapping = applicationContext.getBean(RequestMappingHandlerMapping.class);

Map handlerMethods = requestMappingHandlerMapping.getHandlerMethods();

for (Map.Entry 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));

}

}

测试结果


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:静态路由配置实验(静态路由配置实验原理)
下一篇:NAT笔记(nat记录)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~