1. 概述
當與 REST API 交互時,通常需要檢索所有 REST 端點。例如,我們可能需要將所有請求映射端點保存到數據庫中。在本教程中,我們將探討如何在 Spring Boot 應用程序中獲取所有 REST 端點。
2. 映射端點
在 Spring Boot 應用程序中,我們通過在控制器類中使用 <em/>@RequestMapping 註解來暴露 REST API 端點。 獲取這些端點有三種方法:事件監聽器、Spring Boot Actuator 或 SpringDoc 庫。
3. 基於事件監聽器的方法
為了創建 REST API 服務,我們在控制器類中使用 <em @RestController</em> 和 <em @RequestMapping</em>。這些類在 spring 應用上下文中註冊為 spring 託管的 Bean。因此,我們可以使用事件監聽器在應用程序上下文準備就緒時獲取端點。定義監聽器有兩...
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. <em @EventListener</em> 註解
使用另一種方式來映射我們的端點,即使用 <em @EventListener</em> 註解。我們直接將該註解應用於處理 <em ContextRefreshedEvent</em> 的方法:
@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 依賴
為了啓用此功能,我們將向我們的 pom.xml文件中添加 spring-boot-starter-actuator Maven 依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>4.2. 配置
默認情況下,僅提供 /health 和 /info 兩個端點。當添加 spring-boot-actuator 依賴後,要啓用所有 actuator 端點,可以通過在我們的 application.properties 文件中添加一個屬性來實現:
management.endpoints.web.exposure.include=*或者,我們可以簡單地暴露端點以檢索映射:
management.endpoints.web.exposure.include=mappings一旦啓用,我們的應用程序的 REST API 端點位於 http://host/actuator/mappings。
5. SpringDoc
SpringDoc 庫還可以用於列出 REST API 的所有端點。
5.1. Maven 依賴
為了將其添加到我們的項目中,我們需要在 <em >pom.xml</em> 文件中添加 <em >springdoc-openapi-ui</em> 依賴:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.7.0</version>
</dependency>5.2. 配置
讓我們通過定義 OpenAPI 豆來創建配置類:
@Bean
public OpenAPI openAPI() {
return new OpenAPI().info(new Info().title("SpringDoc example")
.description("SpringDoc application")
.version("v0.0.1"));
}要訪問 REST API 端點,請在瀏覽器中訪問以下 URL:
http://localhost:8080/swagger-ui/index.html6. 結論
本文介紹瞭如何在 Spring Boot 應用程序中使用事件監聽器、Spring Boot Actuator 和 SpringDoc 庫來檢索請求映射端點的方法。