Swagger-ui 不断显示示例 petstore 而不是我的 API

问题描述 投票:0回答:3

我对此有点迷失,因为它通常是开箱即用的。我正在制作一个小型 java spring-boot Rest api,为了获得漂亮的 API 描述和测试页面,我使用 Swagger。除了这次它不显示我的应用程序的内容,它显示默认的宠物商店页面。

这是我在 pom 中得到的(在我的其他应用程序中看起来是一样的):

    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.14.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.14.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.14.0</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.7.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.7.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-ui</artifactId>
            <version>1.5.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>3.0.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.19</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

我也尝试过:

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>${springfox.version}</version>
        </dependency>

但这并没有什么区别。不知道从这里去哪里。

java spring-boot maven swagger-ui
3个回答
7
投票

您可能只是访问了错误的网址。这是我犯的一个错误。以我的项目为例:

  • http://localhost:8080/swagger-ui/index.html 将向我展示 PetSore API
  • http://localhost:8080/swagger-ui.html 向我展示了我自己的 API

OpenAPI 页面 向我提供了这一点:

  • Swagger UI 页面将在以下位置提供:

    http://server:port/context-path/swagger-ui.html
    和 OpenAPI 描述将在以下 url 中提供,格式为 json:
    http://server:port/context-path/v3/api-docs

    • 服务器:服务器名称或IP
    • 端口:服务器端口
    • context-path:应用程序的上下文路径

3
投票

以我的 springboot 3 为例, 原因是我的安全过滤器不知道: http://127.0.0.7:9000/v3/api-docs/swagger-config

症状: 我的 swagger-ui/index.html 向我展示了 Petshop 当我没有登录时;当我登录时向我展示了钱;

解决方法:

@EnableWebSecurity
@Configuration(proxyBeanMethods = false)
public class DefaultSecurityConfig {

    @Bean
    SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(authorize ->
                authorize.requestMatchers(
                "/swagger-ui.html","/swagger-ui/**",
                "/v3/api-docs/**" //<<---(1)
                ).permitAll())
            .authorizeHttpRequests(authorize ->
                authorize.anyRequest().authenticated()

        )
            .formLogin(withDefaults());
        return http.build();
    }
...

0
投票

在我的例子中,两个 URL(swagger-ui/index.html 和 swagger-ui.html)与第一个重定向到第二个是等效的。 问题就简单多了。在 Swagger UI 本身中,有一个 opendoc 源文本框,其中包含 Petstore API 的默认值。要加载您自己的 API,只需将文本框中的 URL 替换为:

{Application Context Path}/v3/api-docs

然后点击探索。

© www.soinside.com 2019 - 2024. All rights reserved.