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 相关?正如我所说,我是这个世界的新手,所以如果有人能指出我为什么它不起作用,那就太棒了,谢谢!
所以我有一个简单的 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 相关?正如我所说,我是这个世界的新手,所以如果有人能指出我为什么它不起作用,那就太棒了,谢谢!