Рубрики
Без рубрики

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

Узнайте, как найти все конечные точки для приложения Spring Boot REST.

Автор оригинала: baeldung.

1. Обзор

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

2. Отображение Конечных Точек

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

3. Подход к Прослушиванию Событий

Для создания службы REST API мы используем @RestController и @RequestMapping в классе контроллера. Эти классы регистрируются в контексте приложения spring как компонент spring. Таким образом, мы можем получить конечные точки с помощью прослушивателя событий, когда контекст приложения готов при запуске. Существует два способа определения слушателя. Мы можем либо реализовать интерфейс 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 map = requestMappingHandlerMapping
        .getHandlerMethods();
    map.forEach((key, value) -> LOGGER.info("{} {}", key, value));
}

Таким образом, мы используем класс ContextRefreshedEvent . Это событие публикуется, когда ApplicationContext инициализируется или обновляется. Spring Boot предоставляет множество реализаций HandlerMapping . Среди них класс RequestMappingHandlerMapping , который обнаруживает сопоставления запросов и используется аннотацией @RequestMapping . Поэтому мы используем этот компонент в событии ContextRefreshedEvent .

3.2. Аннотация @EventListener

Другой способ сопоставить наши конечные точки-использовать аннотацию @EventListener . Мы используем эту аннотацию непосредственно в методе, который обрабатывает ContextRefreshedEvent :

@EventListener
public void handleContextRefresh(ContextRefreshedEvent event) {
    ApplicationContext applicationContext = event.getApplicationContext();
    RequestMappingHandlerMapping requestMappingHandlerMapping = applicationContext
        .getBean("requestMappingHandlerMapping", RequestMappingHandlerMapping.class);
    Map map = requestMappingHandlerMapping
        .getHandlerMethods();
    map.forEach((key, value) -> LOGGER.info("{} {}", key, value));
}

4. Подход к приводу

Второй подход для получения списка всех наших конечных точек – это функция привода пружинного загрузчика.

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

Для включения этой функции мы добавим зависимость spring-boot-actuator Maven в ваш pom.xml файл:


    org.springframework.boot
    spring-boot-starter-actuator

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 также может использоваться для перечисления всех конечных точек API REST.

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

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


    io.springfox
    springfox-boot-starter
    3.0.0

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

Давайте создадим класс конфигурации, определив компонент 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 и библиотеки Swagger.

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