Как интегрировать Open API 3 с проектом Spring (не Spring Boot) с помощью springdoc-openapi

Мой существующий проект находится на Spring Framework, а не на Spring Boot.

Я хочу интегрировать с ним Open API 3.

Я хочу выполнить интеграцию с помощью springdoc-openapi, не используя Джерси.


person Ashish Kumar    schedule 23.01.2020    source источник


Ответы (5)


Загрузка пользовательского интерфейса для 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
person Zagrebin Victor    schedule 04.01.2021
comment
Он отлично работает, и я могу настроить некоторые свойства swagger-ui (например, springdoc.swagger-ui.disable-swagger-default-url=true). Тем не менее, если я попытаюсь отключить swagger-ui, возникнет исключение (с использованием свойства springdoc.swagger-ui.enabled=false). Или установка свойства springdoc.swagger-ui.url не действует. Вы каким-либо образом настраивали свой swagger-ui? - person floss.dev; 11.02.2021

Даже ваше приложение использует 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
})
person Community    schedule 23.01.2020
comment
Работает как шарм - person brianbro; 29.01.2020
comment
у меня тоже не сработало. Ошибок нет, но приложение не загружается. - person Nuno Silva; 23.03.2020
comment
@NunoSilva, вы подтвердили, что он работает над этим тикетом: github.com/springdoc/springdoc-openapi/ выпусков / 250 - person brianbro; 04.05.2020

Вы можете сделать это с помощью @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 UI от Центрального репозитория Maven :

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-ui</artifactId>
    <version>1.4.6</version>
</dependency>

Центральный репозиторий Maven:

person ℛɑƒæĿᴿᴹᴿ    schedule 10.09.2020
comment
@ .Info должно быть @Info .... - person cptully; 11.05.2021
comment
@cptully Вы правы, я внес исправления, большое спасибо за то, что дали мне знать. - person ℛɑƒæĿᴿᴹᴿ; 11.05.2021

Вот пример проекта, созданного с помощью Spring и встроенного веб-сервера Undertow: https://github.com/essentialprogramming/undertow-spring-web Нет Spring Boot, даже если он ведет себя так же. Просто запустите класс Server. main. Итак, Open API будет доступен по адресу http://localhost:8080/apidoc

Вам просто нужно украсить Spring WebApplicationContext необходимыми bean-компонентами:

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;
}
person Razvan Prichici    schedule 11.06.2020

В моем случае для загрузки страницы 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>
person ottis79    schedule 01.02.2021