怎麼獲取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應用程序中檢索請求映射端點。