1.概述
使用REST API时,通常会检索所有REST端点。例如,我们可能需要将所有请求映射终结点保存在数据库中。在本教程中,我们将研究如何在Spring Boot应用程序中获取所有REST端点。
2.映射端点
在Spring Boot应用程序中,我们通过使用控制器类中@RequestMapping
为了获得这些端点,有三个选项:事件监听器,Spring Boot Actuator或Swagger库。
3.事件监听器方法
为了创建REST API服务,我们在控制器类中@RestController
和@RequestMapping
这些类在spring应用程序上下文中注册为spring bean。因此,当应用程序上下文在启动时准备就绪时,我们可以使用事件侦听器获取端点。有两种定义侦听器的方法。我们可以实现ApplicationListener
接口,也可以使用@ EventListener
批注。
3.1。 ApplicationListener
接口
在实现ApplicationListener
,我们必须定义onApplicationEvent()
方法:
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
ApplicationContext applicationContext = event.getApplicationContext();
RequestMappingHandlerMapping requestMappingHandlerMapping = applicationContext
.getBean("requestMappingHandlerMapping", RequestMappingHandlerMapping.class);
Map<RequestMappingInfo, HandlerMethod> map = requestMappingHandlerMapping
.getHandlerMethods();
map.forEach((key, value) -> LOGGER.info("{} {}", key, value));
}
这样,我们使用了ContextRefreshedEvent
类。初始化或刷新ApplicationContext
时,将发布此事件。 Spring Boot提供了许多HandlerMapping
实现。其中之一是RequestMappingHandlerMapping
类,该类检测请求映射,并由@RequestMapping
批注使用。因此,我们在ContextRefreshedEvent
事件中使用此bean。
3.2 @EventListener
注释
映射端点的另一种方法是使用@EventListener
批注。 ContextRefreshedEvent
的方法上使用此批注:
@EventListener
public void handleContextRefresh(ContextRefreshedEvent event) {
ApplicationContext applicationContext = event.getApplicationContext();
RequestMappingHandlerMapping requestMappingHandlerMapping = applicationContext
.getBean("requestMappingHandlerMapping", RequestMappingHandlerMapping.class);
Map<RequestMappingInfo, HandlerMethod> map = requestMappingHandlerMapping
.getHandlerMethods();
map.forEach((key, value) -> LOGGER.info("{} {}", key, value));
}
4.Actuator方法
检索所有端点列表的第二种方法是通过Spring Boot Actuator功能。
4.1 Maven依赖
为了启用此功能,我们将·spring-boot-actuator· Maven依赖项添加到我们的pom.xml
文件中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
4.2 配置
当我们添加spring-boot-actuator
依赖项时,默认情况下/health
和/info
要启用所有执行器端点application.properties
文件中添加一个属性来公开它们:
management.endpoints.web.exposure.include=*
或者,我们可以简单地公开端点以获取mappings
:
management.endpoints.web.exposure.include=mappings
http://host/actuator/mappings
上获得我们应用程序的REST API端点。
5.Swagger
Swagger库还可用于列出REST API的所有端点。
5.1 Maven依赖
要将其添加到我们的项目中,我们需要pom.xml
文件中springfox-boot-starter
依赖项:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
5.2配置
让我们通过定义Docket
bean创建配置类:
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
Docket
是一个构建器类,用于配置Swagger文档的生成。要访问REST API端点,我们可以在浏览器中访问以下URL:
http://host/v2/api-docs
六,结论
在本文中,我们描述了如何通过使用事件侦听器,Spring Boot Actuator和Swagger库在Spring Boot应用程序中检索请求映射端点。
0 评论