问题描述
所以我有一个Spring Boot项目,我刚刚在其中添加了OpenAPI Swagger UI。它会为我们所有的控制器和模型自动很好地自动生成文档。但是我想添加一些额外的配置,例如externalDocs,如下所示。
externalDocs:
url: URL
description: DESC
但是,由于它是自动生成的,所以我没有招摇的YAML。我尝试通过以下方法将其添加到没有运气的Bean中。
import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springframework.context.annotation.Bean;
public class springShopOpenAPI{
@Bean
public OpenAPI springShopOpenAPI() {
return new OpenAPI()
.info(new Info().title("SpringShop API")
.description("Spring shop sample application")
.version("v0.0.1")
.license(new License().name("Apache 2.0").url("http://springdoc.org")))
.externalDocs(new ExternalDocumentation()
.description("SpringShop Wiki Documentation")
.url("https://springshop.wiki.github.org/docs"));
}
}
如果需要,下面是我的Pom.xml。
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.2.28</version>
</dependency>
谢谢您的建议。
解决方法
您需要实现OperationCustomizer
接口以添加外部链接。代码应如下所示
@Component
public class EndpointCustomizer implements OperationCustomizer {
@Override
public Operation customize(Operation operation,HandlerMethod handlerMethod) {
// Will add the externalDocs to all the endpoints
operation.externalDocs(new ExternalDocumentation().url("/resource").description("Link to resource"));
return operation;
}
}
您还可以根据特定条件执行其他逻辑以添加externalDocs
。
定义该类后,您需要在定义OpenAPI Bean的类中创建一个API组(在本例中为springShopOpenAPI
类)。
@Bean
public GroupedOpenApi hideApis(EndpointCustomizer endpointCustomizer) {
return GroupedOpenApi.builder().group("default") // or use null instead of default
.addOperationCustomizer(endpointCustomizer)
.build();
}
,
我要做的就是添加@Configuration
并更新pom.xml以使其具有以下内容。
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.4.4</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-webmvc-core</artifactId>
<version>1.4.4</version>
</dependency>
import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class springShopOpenAPI{
@Bean
public OpenAPI customOpenAPI(){
return new OpenAPI()
.info(new Info().title("SpringShop API")
.description("Spring shop sample application")
.version("v0.0.1")
.license(new License().name("Apache 2.0").url("http://springdoc.org")))
.externalDocs(new ExternalDocumentation()
.description("SpringShop Wiki Documentation")
.url("https://springshop.wiki.github.org/docs"));
}
}