如何在Spring Boot 3上运行Swagger 3?
使用带有 Java17 和 Spring Boot 3.0.0 的全新 Spring Initialzr,并为Springfox Swagger 3额外添加pom.xml,我无法让Swagger页面工作。相反,我得到的是带有404的空白错误页面。
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
这个Github Issues页面中定义的标准Swagger URL对于上述pom.xml项目来说并不起作用。
在发布问题后,我曾放弃了,去使用Spring Boot 2.7。但是,在看到Dmitriy的回答后,我最后一次检查了Springdoc,发现Springdoc v2确实支持Spring Boot 3。
基本上,人们必须在他们的Pom中放置以下内容。
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.0</version>
</dependency>
然后,人们可以使用以下URL访问Swagger页面:http://localhost:8080/swagger-ui.html(如果你需要的话,不要忘记添加上下文路径)。由于某些原因,当打开时,它重定向到http://localhost:8080/swagger-ui/index.html,尽管最初返回404......
除了在接受的答案中指出的添加springdoc-openapi-starter-webmvc-ui
(对我来说是v2.0.2)之外,我还需要删除org.springdoc:springdoc-openapi-ui:1.6.13
。
它在那里是因为我以前尝试过。 如果存在,则仍然存在 Spring 尝试解析(但未能解析)的非 Jakarta 引用。
我还需要添加这个依赖关系,否则我在启动时就会有一个讨厌的消息(版本由Spring Boot BOM解决)。
implementation group: 'org.hibernate.validator', name: 'hibernate-validator'
最新的springfox-boot-starter 3.0.0版本和springdoc-openapi-ui 1.6.13版本。
似乎不支持spring-boot 3。
我们需要等待,直到新版本采用jakarta.servlet包的时候。
对于Gradle,你可以添加这样的内容。
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.0'
我同意@Ahmed Tawfik的观点,因为我也面临同样的问题。但今天我用新版本的"springdoc-openapi-starter-webmvc-ui"依赖和Spring Boot 3.0.2-SNAPSHOT尝试了同样的方法。
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.2</version>
</dependency>
因为之前的"springdoc-openapi-ui"被改成了上面的那个。
另外,在下面写上swagger UI的安全配置的路径。
"/v3/api-docs/**","/swagger-ui/**"
对于我的项目来说。
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http.cors(AbstractHttpConfigurer::disable)
.csrf(AbstractHttpConfigurer::disable)
.exceptionHandling(exceptionHandlingConfigurer -> exceptionHandlingConfigurer.authenticationEntryPoint(unauthorizedHandler))
.authorizeHttpRequests(authorizationManagerRequestMatcherRegistry -> {
try {
authorizationManagerRequestMatcherRegistry
.requestMatchers(HttpMethod.POST, POST_AUTH_WHITELIST).permitAll()
.requestMatchers(HttpMethod.GET, GET_AUTH_WHITELIST).permitAll()
.requestMatchers("/v3/api-docs/**", "/swagger-ui/**").permitAll()
.anyRequest()
.authenticated()
.and()
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
} catch (Exception e) {
throw new ResourceNotFoundException(e.getMessage());
}
}
)
.formLogin(AbstractHttpConfigurer::disable)
.httpBasic(AbstractHttpConfigurer::disable).addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
.authenticationProvider(daoAuthenticationProvider()).build();
}
swagger用户界面的链接将是:
http://server:port/context-path/swagger-ui.html
请根据您的个人更改server, port, 和context-path。
上述所有步骤在我的项目中都运行良好。我不需要额外的配置。
此外,你还可以添加自定义路径(可选):
springdoc.swagger-ui.path=/swagger-ui.html
以下是OpenApi 3和Spring Boot的官方文档:https://springdoc.org/v2/#features。
在上述文件中,你也可以探索其他的配置和其他东西。
快乐学习!✌️
Springdoc可以在Spring boot 3.0.1中使用。
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.2</version>
</dependency>
默认的URL:http://localhost:8080/swagger-ui/index.html
在Spring v3.0中使用Open API代替swagger。遵循此文档Open API Docs。
以下的依赖关系对我来说工作得很好。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sample.app</groupId>
<artifactId>hello-world</artifactId>
<version>1.0.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.1</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
</project>