怎麼獲取Spring Boot中的所有REST端點
- Spring Boot
- Swagger
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應用程序中檢索請求映射端點。