因此,我有一个简单的Spring Boot REST API,它工作得很好,现在我为ui和核心添加了一些swagger依赖项,并使用@ApiIgnore或@Operation等标记进行了一些测试,它们都工作得很好,并且都在http://localhost:8080/swagger-ui/#/中进行了更新
现在我正在尝试通过@OpenAPIDefinition标签更新API信息,在我的应用程序类中如下所示:
@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 boot应用程序应该执行类扫描,识别@OpenAPIDefinition bean,并在http://localhost:8080/v3/api-docs中更新生成的json。但事实并非如此,我也尝试过用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标签。正如我所说的,我对整个事情和堆栈溢出都是新手,所以如果我忘记添加任何相关的代码,请原谅,谢谢!
发布于 2021-09-23 00:28:03
所以在做了很多不同的事情之后,我找到了这个guide,它解释了如何改变API信息,简而言之,我在我的EmployeeController类中添加了一个@Api(tags = "Employee")
,然后在我的应用程序类中添加了:
@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相关的吗?正如我所说的,我是这个世界的新手,所以如果有人能告诉我为什么它不能工作,那就太棒了,谢谢!
发布于 2021-09-22 11:38:41
尝试删除一些不必要的依赖关系:
<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")));
}
}
https://stackoverflow.com/questions/69283628
复制相似问题