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.