我正在尝试将 swagger-ui (OpenAPI 3.0) 添加到 Spring Boot v3 应用程序中。
我已经添加了 openapi-ui maven 依赖项,它应该按照文档工作。
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.6.11</version>
</dependency>
但显然,它仍然不起作用并且 localhost:8080/swagger-ui.html 返回 404 错误。
我错过了什么?
根据文档:
对于 spring-boot 3 支持,请确保使用 springdoc-openapi v2
对于spring-boot和swagger-ui的集成,添加 库添加到项目依赖项列表中(无需额外 需要配置)
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.0</version>
</dependency>
这将自动部署 swagger-ui 到 spring-boot 应用:
文档将以 HTML 格式提供,使用官方 swagger-ui 罐子
Swagger UI 页面随后将在
和 OpenAPI json 格式的描述将在以下 url 中提供:http://server:port/context-path/swagger-ui.html
http://server:port/context-path/v3/api-docs
server: The server name or IP
port: The server port
context-path: The context path of the application
Documentation can be available in yaml format as well, on the following path : /v3/api-docs.yaml
请注意模块已重命名:
我完全同意@JCompetence。请注意 springdoc-openapi-ui现在更改为springdoc-openapi-starter-webmvc-ui 来自 spring boot 3.
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.2</version>
</dependency>
请试试这个。如果您想查找更多信息,请查看官方链接: https://springdoc.org/v2/#features
对我有帮助,只是改变了依赖性
implementation group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.6.11'
到
implementation group: 'org.springdoc', name: 'springdoc-openapi-starter-webmvc-ui', version: '2.0.0'
或
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.0</version>
</dependency>
springdoc-openapi-starter-webmvc-ui
不适用于spring-boot-starter-webflux
直到你包括spring-boot-starter-web
。
如果你包括弹簧安全那么它就死了。
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.4</version>
</dependency>
对于kotlin你必须多加一个依赖
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-kotlin</artifactId>
</dependency>
然后在您的主类上添加`@OpenAPIDefinition
@SpringBootApplication
@OpenAPIDefinition
class MyApplication {
}
从 OpenApi 规范(.yml 文件)生成(Java)代码的 Maven 插件
生成器“spring”支持 Jakarta 命名空间
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<configuration>
<configOptions>
...
**<useSpringBoot3>true</useSpringBoot3>**
</configOptions>
</configuration>
</plugin>
生成器“java”(生成客户端)还不支持 Jakarta 命名空间。 所以使用 Eclipse Transformer 插件(需要提供 Javax 依赖范围!)
<plugin>
<groupId>org.eclipse.transformer</groupId>
<artifactId>transformer-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<rules>
<jakartaDefaults>true</jakartaDefaults>
</rules>
</configuration>
<executions>
<execution>
<id>jakarta-ee</id>
<goals><goal>jar</goal></goals>
<phase>package</phase>
<configuration>
<artifact>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
</artifact>
</configuration>
</execution>
</executions>
</plugin>
如果您的应用程序启用了 spring 安全性,则只是一个附加组件! 然后您需要将 swagger-endpoint 列入白名单以不使用身份验证
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
httpSecurity.csrf().disable().authorizeHttpRequests(auth -> {
auth.requestMatchers("/v3/**", "/swagger-ui/**").permitAll();
auth.anyRequest().authenticated();
});
return httpSecurity.build();
您还需要将此注释添加到您的 SpringBootApp 主类: @OpenAPIDefinition
@SpringBootApplication
@OpenAPIDefinition
class MyApplication
对于 Spring Security 支持,请使用 Below 依赖项
implementation("org.springdoc:springdoc-openapi-starter-common:2.1.0")
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0")