Перейти к основному содержимому

Получить все конечные точки в Spring Boot

· 3 мин. чтения

1. Обзор

При работе с REST API обычно извлекаются все конечные точки REST. Например, нам может понадобиться сохранить все конечные точки сопоставления запросов в базе данных. В этом руководстве мы рассмотрим, как получить все конечные точки REST в приложении Spring Boot .

2. Сопоставление конечных точек

В приложении Spring Boot мы предоставляем конечную точку REST API с помощью аннотации @RequestMapping в классе контроллера. Для получения этих конечных точек есть три варианта: прослушиватель событий, Spring Boot Actuator или библиотека Swagger.

3. Подход прослушивателя событий

Для создания службы REST API мы используем @RestController и @RequestMapping в классе контроллера. Эти классы регистрируются в контексте приложения Spring как bean-компонент Spring. Следовательно, мы можем получить конечные точки с помощью прослушивателя событий, когда контекст приложения готов при запуске. Есть два способа определить слушателя. Мы можем либо реализовать интерфейс ApplicationListener , либо использовать аннотацию @EventListener `` .

3.1. Интерфейс прослушивателя приложений

При реализации 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 . Поэтому мы используем этот bean-компонент в событии ContextRefreshedEvent .

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. Актуаторный подход

Второй подход для получения списка всех наших конечных точек — с помощью функции Spring Boot Actuator .

4.1. Зависимость от Maven

Чтобы включить эту функцию, мы добавим зависимость Maven spring-boot-actuator в наш файл 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=*

Или мы можем просто указать конечную точку для получения отображений :

management.endpoints.web.exposure.include=mappings

После включения конечные точки REST API нашего приложения доступны по адресу http://host/actuator/mappings .

5. Чванство

Библиотеку Swagger также можно использовать для перечисления всех конечных точек REST API.

5.1. Зависимость от Maven

Чтобы добавить его в наш проект, нам нужна зависимость springfox-boot-starter в файле pom.xml :

<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>

5.2. Конфигурация

Давайте создадим класс конфигурации, определив bean- компонент Docket :

@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

6. Заключение

В этой статье мы опишем, как получить конечные точки сопоставления запросов в приложении Spring Boot с помощью прослушивателя событий, Spring Boot Actuator и библиотеки Swagger.

Как обычно, все примеры кода, используемые в этом руководстве, доступны на GitHub.