怎麼獲取Spring Boot中的所有REST端點

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