Swagger @OpenAPIDefinition 没有做任何事情

Swagger @OpenAPIDefinition not doing anything

所以我有一个简单的 Spring Boot REST API 可以正常工作,现在我添加了一些 swagger 依赖项,用于 ui 和核心,并用一些标签,如 @ApiIgnore 或 @Operation,它们都工作正常,并且都在 http://localhost:8080/swagger-ui/#/

中更新

现在我正在尝试通过@OpenAPIDefinition 标记更新API 信息,在我的应用程序中是这样的class:

@OpenAPIDefinition(
        info = @Info(
            title = "the title",
            version = "0.0",
            description = "My API",
            license = @License(name = "Apache 2.0", url = "http://foo.bar"),
            contact = @Contact(url = "http://gigantic-server.com", name = "Fred", email = "Fred@gigagantic-server.com")))

现在我已经阅读 here spring 引导应用程序应该进行 class 扫描并识别 @OpenAPIDefinition bean 并更新生成的 json 在 http://localhost:8080/v3/api-docs。但事实并非如此,我也尝试过使用 openapi.yaml 文件设置该信息,但也没有成功。

我怀疑这可能与我的依赖关系有关,因为我是新手,仍然有点迷茫,可能混淆了一些东西,我把我的 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>2.5.4</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>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</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-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>de.flapdoodle.embed</groupId>
            <artifactId>de.flapdoodle.embed.mongo</artifactId>
            <scope>test</scope>
        </dependency>
        
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
          <groupId>io.swagger.core.v3</groupId>
          <artifactId>swagger-jaxrs2</artifactId>
          <version>2.1.2</version>
        </dependency>
        <dependency>
          <groupId>io.swagger.core.v3</groupId>
          <artifactId>swagger-jaxrs2-servlet-initializer-v2</artifactId>
          <version>2.1.2</version>
        </dependency>

        
        
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

我对如何继续有点不知所措,不明白 swagger 如何识别 @ApiIgnore 标签,但忽略 @OpenAPIDefinition 标签。正如我所说,我对整个事情和一般的 Whosebug 都是新手,所以如果我忘记添加任何相关代码,请原谅我,谢谢!

尝试删除一些不必要的依赖项:

<dependency>
  <groupId>io.springfox</groupId>
  <artifactId>springfox-swagger-ui</artifactId>
  <version>3.0.0</version>
</dependency>
<dependency>
  <groupId>io.swagger.core.v3</groupId>
  <artifactId>swagger-jaxrs2</artifactId>
  <version>2.1.2</version>
</dependency>
<dependency>
  <groupId>io.swagger.core.v3</groupId>
  <artifactId>swagger-jaxrs2-servlet-initializer-v2</artifactId>
  <version>2.1.2</version>
</dependency>

springfox-boot-starter 应该已经把它们带进来了。

如果这不起作用,您可以随时执行以下操作:

@Configuration
public class SwaggerConfiguration {

    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                .info(new Info().title("the title").version("0.0").description("My API")
                    .contact(new Contact().name("Fred").url("http://gigantic-server.com").email("Fred@gigagantic-server.com")));
    }

}

所以在做了很多不同的事情之后我发现这个 guide 解释了如何改变 API 信息,简而言之,我在我的 EmployeeController class,然后在我的应用程序 class 中添加:

@Bean
      public Docket docket() {
        return new Docket(DocumentationType.OAS_30)
            .apiInfo(new ApiInfoBuilder()
                .title("Employee API")
                .description("A CRUD API to demonstrate Springfox 3 integration")
                .version("0.0.1-SNAPSHOT")
                .license("MIT")
                .licenseUrl("https://opensource.org/licenses/MIT")
                .build())
            .tags(new Tag("Employee", "Endpoints for CRUD operations on employees"))
            .select().apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
            .build();
      } 

这似乎解决了这个问题,我现在想知道如果我有多个控制器会发生什么,我希望这对处于我困境中的任何人有所帮助,总体问题似乎是这是与 springfox 相关的方式更改 API 文档和以前的方法是否与 swagger-core 相关?正如我所说,我是这个世界的新手,所以如果有人能指出我为什么它不起作用,那就太棒了,谢谢!