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

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

Springboot项目获取所有接口

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

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

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

测试单元

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));
	}
}

测试结果

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Springboot 扫描mapper接口的2种操作

    方式一: 在所有mapper接口使用@Mapper注解 @Mapper (将包中的所有接口都标注为DAO层接口) public interface UserMapper { UserInfo getUserInfo(@Param("userId") String userId); } 方式二: 在springboot的启动类使用@MapperScan注解 (作用:将指定包中的所有接口都标注为DAO层接口,相当于在每一个接口上写@Mapper) @SpringBootApplicatio

  • SpringBoot实现API接口的完整代码

    一.简介 产品迭代过程中,同一个接口可能同时存在多个版本,不同版本的接口URL.参数相同,可能就是内部逻辑不同.尤其是在同一接口需要同时支持旧版本和新版本的情况下,比如APP发布新版本了,有的用户可能不选择升级,这是后接口的版本管理就十分必要了,根据APP的版本就可以提供不同版本的接口. 二.代码实现 本文的代码实现基于SpringBoot 2.3.4-release 1.定义注解 ApiVersion @Target({ElementType.TYPE, ElementType.METHOD}

  • springboot统一接口返回数据的实现

    一,没有异常的情况,正常返回数据 希望接口统一返回的数据格式如下: { "status": 0, "msg": "成功", "data": null } 和接口数据对应的bean /** * 统一返回结果的实体 * @param <T> */ public class Result<T> implements Serializable { private static final long serial

  • SpringBoot后端接口的实现(看这一篇就够了)

    摘要:本文演示如何构建起一个优秀的后端接口体系,体系构建好了自然就有了规范,同时再构建新的后端接口也会十分轻松. 一个后端接口大致分为四个部分组成:接口地址(url).接口请求方式(get.post等).请求数据(request).响应数据(response).如何构建这几个部分每个公司要求都不同,没有什么"一定是最好的"标准,但一个优秀的后端接口和一个糟糕的后端接口对比起来差异还是蛮大的,其中最重要的关键点就是看是否规范! 本文就一步一步演示如何构建起一个优秀的后端接口体系,体系构建

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

    目录 Springboot项目获取所有接口 获取项目下所有http接口的信息 一.接口信息类 二.单元测试 Springboot项目获取所有接口 @Autowired private WebApplicationContext applicationContext; @Override public List getAllUrl() { RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMapping

  • SpringBoot项目实现短信发送接口开发的实践

    一. 短信接口实现 描述:请求第三方短信接口平台(而第三方短信平台的接口请求是webservice方式实现的),此时我们要测试接口是否通,要用的工具SoapUI测试工具, 不能用PostMan,即使用post组装完参数请求该短信平台接口也不会通的(请求之前要ping通IP,只有在同一网段才可请求.或者使用VPN远程连接也可请求),接口通了之后.开始裸代码.代码使用IDEA工具去完成 , 实现逻辑根据需求而定. 首先导入两个依赖 <!--生成短信代码webservice START--> <

  • SpringBoot项目使用 axis 调用webservice接口的实践记录

    目录 序 WebService 定义 个人理解 实践 webservice 常识 一个webservice 接口发布地址往往类似: qq在线接口验证接口为例 maven 使用 axis 应用依赖(不可缺失必须) 代码(粘贴可用) 序 实际工作场景中会存在对接去很多系统的数据的任务,数据对接呢 方式很多吧,接触过 : http| https请求 数据库视图 数据库存储过程 soap+xml工单... 然后这两天接到一个关于webservice 数据接口的方式对接,说实话对于这个一脸懵逼,完全不知道

  • SpringBoot项目如何把接口参数中的空白值替换为null值(推荐)

    问题发生 我们公司代码生成的时候,查询列表统一都是使用了setEntity() ,查询写法如下: public List<BasReservoirArea> selectList(BasReservoirArea basReservoirArea) { QueryWrapper<BasReservoirArea> where = new QueryWrapper<>(); where.setEntity(basReservoirArea); return baseMap

  • SpringBoot项目中接口防刷的完整代码

    一.自定义注解 import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.RetentionPolicy.RUNTIME; /** * @author Yang * @version 1.0 * @date 2021/2/22

  • SpringBoot连接MySQL获取数据写后端接口的操作方法

    1.新建项目 2.添加依赖 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.20</version> </dependency> <dependency> <groupId>org.springframework</groupId>

  • webservice实现springboot项目间接口调用与对象传递示例

    目录 一.百度百科 二.webservice的技术支持 1.XML和XSD 2.SOAP 3.WSDL 4.UDDI 5.调用RPC与消息传递 三.webservice的应用场景和弊端 1.webservice的应用场景 2.webservice的弊端 四.webservice代码实例 服务端项目代码 客户端项目代码: 一.百度百科 Web Service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.

  • SpringBoot项目访问任意接口出现401错误的解决方案

    之前搭建了一个SpringBoot项目用于测试集成Redis和MyBatis以及Freemarker,搭建完成测通之后就没有再打开过.今天打开之后想要测试一个问题,发现在这个项目下无论请求哪个接口,浏览器都会跳转到一个登录页面,而且这个页面不是我写的,如下图: 地址栏里的login也是在我输入了自己的接口之后,自动跳转到了login 于是用Postman测试,得到401响应: 当时一脸蒙蔽,心想我代码里面没有写拦截器啊,而且拦截之后的页面也不是我写的.刚开始认为可能和端口有关,后来发现不是.于是

  • springboot项目打成jar包后无法获取static下的静态资源文件的问题分析

    springboot 后端项目 做某个功能时 需要读取根目录下的.doc文件,具体项目中路径如下: 开始是通过绝对路径读取文档,在本地没有任何问题. 但是 讲项目打成jar包 部署到测试环境发现无论怎样都读取不到,然后在本地运行jar包出现同样的情况. 捕获异常:java.io.FileNotFoundException [org.apache.ibatis.session.defaults.DefaultSqlSession@55b40849] java.io.FileNotFoundExce

  • springboot项目获取resources相对路径的方法

    springboot文件上传保存到resources里,用 System.getProperty("user.dir");参数即可获得项目相对路径.(ps:不知道是不是springboot内嵌tomcat容器的原因,用网上的request.getServletContext().getRealPath("/")方法获得的路径不是项目路径,而是c盘下一个tomcat目录路径) 保存成功图: 到此这篇关于springboot项目获取resources相对路径的方法 的文

随机推荐