Как интегрировать Open API 3 с проектом Spring (не Spring Boot) с помощью springdoc-openapi
Мой существующий проект находится на Spring Framework, а не на Spring Boot.
Я хочу интегрировать с ним Open API 3.
Я хочу выполнить интеграцию с помощью springdoc-openapi, не используя Джерси.
6 ответов
Загрузка пользовательского интерфейса для spring-mvc (5.3.1) с использованием springdoc-openapi-ui 1.5.2 выглядит проще:
build.gradle (версия Gradle 6.5)
implementation 'org.springdoc:springdoc-openapi-ui:1.5.2'
Spring-boot-autoconfigure и spring-boot явно не нужны в разделе зависимостей, потому что org.springdoc:springdoc-openapi-ui:1.5.2 уже имеет их обе (версия 2.4.0). Вы будете удивлены, сколько и какие зависимости будут добавлены в ваше окончательное приложение.
OpenApiConfig.java
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"org.springdoc"})
@Import({org.springdoc.core.SpringDocConfiguration.class,
org.springdoc.webmvc.core.SpringDocWebMvcConfiguration.class,
org.springdoc.webmvc.ui.SwaggerConfig.class,
org.springdoc.core.SwaggerUiConfigProperties.class,
org.springdoc.core.SwaggerUiOAuthProperties.class,
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration.class})
class OpenApiConfig implements WebMvcConfigurer {
}
Пакет OpenApiConfig должен быть охвачен сканированием компонентов.
В случае использования Spring Security вы можете добавить два шаблона URL и определить роль в вашем коде для доступа к страницам OpenAPI.
<security:intercept-url pattern="/swagger*/**" access="ROLE_DEVELOPER"/>
<security:intercept-url pattern="/v3/api-docs" access="ROLE_DEVELOPER"/>
URL-адреса для проверки:
http://localhost:8080/your_context_path/swagger-ui.html
http://localhost:8080/your_context_path/v3/api-docs
Даже ваше приложение использует Spring без (spring-boot), оно должно работать. Вам нужно добавить автоконфигурацию bean-компонентов и зависимостей, которые изначально предоставляются в spring-boot.
В основном вам нужно добавить модуль springdoc-openapi и просканировать классы автоконфигурации springdoc, которые Spring-boot автоматически загружает для вас. В зависимости от вашего модуля вы можете найти их в файле: spring.factories каждого модуля springdoc-openapi.
Например, предположим, что вы хотите загрузить swagger-ui в приложение spring-mvc, и вы используете spring.version=5.1.12.RELEASE, и вы
Вы можете добавить следующую зависимость:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.2.28</version>
</dependency>
Если у вас нет зависимостей spring-boot и spring-boot-autoconfigure, вам необходимо добавить их. И обратите внимание на матрицу совместимости между Spring.verion и spring-boot.version. Например, в этом случае (spring.version=5.1.12.RELEASE):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>2.1.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.1.11.RELEASE</version>
</dependency>
В этом случае, поскольку мы хотим загрузить пользовательский интерфейс для spring -mvc, вам нужно будет добавить следующее в один из ваших классов конфигурации:
@Import({ org.springdoc.core.SpringDocConfiguration.class, org.springdoc.core.SpringDocWebMvcConfiguration.class,
org.springdoc.ui.SwaggerConfig.class, org.springdoc.core.SwaggerUiConfigProperties.class,
org.springdoc.core.SwaggerUiOAuthProperties.class,
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration.class })
Вы можете сделать это с @Annotations
тоже:
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.servers.Server;
import io.swagger.v3.oas.annotations.info.Info
@OpenAPIDefinition(info = @.Info(title = "My REST API", version = "1.2.6",
description = "My OpenAPIDefinition description"),
servers = { @Server(url = "/my-api", description = "Default URL")})
public class OpenApiConfig { }
Зависимость пользовательского интерфейса Springdoc OpenAPI от центрального репозитория Maven:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.4.6</version>
</dependency>
Центральный репозиторий Maven:
В моем случае для загрузки страницы swagger-ui.html я использовал Spring версии 5.3.3 и springdoc-openapi-ui версии 1.5.2.
Конфигурация моего класса:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example")
@Import({org.springdoc.core.SpringDocConfiguration.class,
org.springdoc.webmvc.core.SpringDocWebMvcConfiguration.class,
org.springdoc.webmvc.ui.SwaggerConfig.class,
org.springdoc.core.SwaggerUiConfigProperties.class,
org.springdoc.core.SwaggerUiOAuthProperties.class,
org.springdoc.core.SpringDocConfigProperties.class,
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration.class})
public class WebConfig implements WebMvcConfigurer{
}
и мой пом:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.5.2</version>
</dependency>
Вот пример проекта, созданного с помощью Spring и встроенного веб-сервера Undertow: https://github.com/essentialprogramming/undertow-spring-web Нет Spring Boot, даже если он ведет себя как таковой. Просто запустите Сервер. основной класс. Итак, Open API будет доступен по http://localhost:8080/apidoc.
Вам просто нужно украсить Spring WebApplicationContext необходимыми beans:
private static AnnotationConfigWebApplicationContext createSpringWebAppContext(String configLocation) {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.setConfigLocation(configLocation);
context.register(
org.springdoc.core.SwaggerUiConfigProperties.class, org.springdoc.core.SwaggerUiOAuthProperties.class,
org.springdoc.core.SpringDocConfiguration.class, org.springdoc.core.SpringDocConfigProperties.class,
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration.class);
return context;
}
Документирование Spring REST API с использованием OpenAPI 3.0
Чтобы задокументировать ваше весеннее загрузочное приложение с OpenAPI 3.0, используйте эту прекрасную статью от baeldung.
https://www.baeldung.com/spring-rest-openapi-documentation
Кроме того, вы также можете изменить путь URI swagger.
springdoc.swagger-ui.path=/swagger
Приведенный выше /swagger указывает мой контекстный путь к хосту swagger.
теперь мой путь URI для доступа к моей панели управления swagger становится следующим:
http://localhost:8080/swagger