如何使用 springdoc-openapi 将 Open API 3 与 Spring 项目(不是 Spring Boot)集成

Ash*_*mar 10 java spring swagger-ui openapi springdoc

我现有的项目在 Spring Framework 上,而不是 Spring Boot。

我想将 Open API 3 与它集成。

我想使用 springdoc-openapi 而不使用 Jersey 进行集成。

Zag*_*tor 7

使用 springdoc-openapi-ui 1.5.2 的 spring-mvc (5.3.1) ui 加载看起来更简单:

build.gradle(gradle 版本 6.5)

implementation 'org.springdoc:springdoc-openapi-ui:1.5.2'
Run Code Online (Sandbox Code Playgroud)

在依赖项部分中不需要明确的 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 {
}
Run Code Online (Sandbox Code Playgroud)

OpenApiConfig 包应该被组件扫描覆盖。

在使用 Spring Security 的情况下,您可以添加两个 url 模式并在您的代码中为 OpenAPI 页面访问定义角色。

<security:intercept-url pattern="/swagger*/**" access="ROLE_DEVELOPER"/>
<security:intercept-url pattern="/v3/api-docs" access="ROLE_DEVELOPER"/>
Run Code Online (Sandbox Code Playgroud)

要检查的网址:

http://localhost:8080/your_context_path/swagger-ui.html
http://localhost:8080/your_context_path/v3/api-docs
Run Code Online (Sandbox Code Playgroud)

  • 它工作正常,我可以配置一些“swagger-ui”属性(例如 `springdoc.swagger-ui.disable-swagger-default-url=true`)。尽管如此,如果我尝试禁用“swagger-ui”,则会出现异常(使用“springdoc.swagger-ui.enabled=false”属性)。或者设置 `springdoc.swagger-ui.url` 属性不起作用。你有定制过你的“swagger-ui”吗? (2认同)

小智 2

即使您的应用程序使用 spring 而不使用(spring-boot),它也应该可以工作。您需要添加 spring-boot 中原生提供的 bean 和依赖项自动配置。

您主要需要添加springdoc-openapi模块并扫描自动加载的 springdoc 自动配置类spring-boot。根据您的模块,您可以在spring.factories每个springdoc-openapi模块的 file: 中找到它们。

例如,假设您想要加载应用程序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>
Run Code Online (Sandbox Code Playgroud)

如果您没有spring-bootspring-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>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,由于我们想要加载 spring-mvc 的 ui,因此您需要在配置类之一中添加以下内容:

@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
})
Run Code Online (Sandbox Code Playgroud)