如何在Spring Boot 3上运行Swagger 3?

回答 8 浏览 7656 2022-11-29

使用带有 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项目来说并不起作用。

Ahmed Tawfik 提问于2022-11-29
8 个回答
#1楼 已采纳
得票数 19

在发布问题后,我曾放弃了,去使用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......

Ahmed Tawfik 提问于2022-11-30
Ahmed Tawfik 修改于2023-01-13
除了降级spring boot版本外,你是否找到了其他解决方法 @阿赫米特Tabish Hafeez 2023-01-04
嗨,@TabishHafeez。正如答案所说,Spring Boot 3.0已被SpringDoc 2.0所覆盖。Ahmed Tawfik 2023-01-05
#2楼
得票数 5

除了在接受的答案中指出的添加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'
Vincent F 提问于2022-12-16
#3楼
得票数 4

最新的springfox-boot-starter 3.0.0版本和springdoc-openapi-ui 1.6.13版本。

似乎不支持spring-boot 3。

我们需要等待,直到新版本采用jakarta.servlet包的时候。

Dmitriy Baron 提问于2022-11-30
#4楼
得票数 2

对于Gradle,你可以添加这样的内容。

implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.0'
Semih Biygit 提问于2022-12-13
#5楼
得票数 2

我同意@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

在上述文件中,你也可以探索其他的配置和其他东西。

快乐学习!✌️

Suman Maity 提问于2022-12-23
这需要在2023年1月9日成为公认的答案。sineverba 2023-01-09
#6楼
得票数 2

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

Makara Set 提问于2022-12-27
#7楼
得票数 0

在Spring v3.0中使用Open API代替swagger。遵循此文档Open API Docs

enter image description here

Chameera W. Ashan 提问于2022-12-30
#8楼
得票数 0

以下的依赖关系对我来说工作得很好。

<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>
Hari Krishna 提问于2023-01-16