Swagger升级到Knife4j和Springdoc,不再为SpringBoot3兼容性发愁
2022-11-12 19:43:46
SpringBoot3中Swagger整合Knife4j和Springdoc的配置指南
SpringBoot3和Swagger的不解之缘
随着SpringBoot3的发布,Swagger兼容性问题应运而生,原因在于javax包的弃用。为了解决此问题,我们需要转向Springdoc和Knife4j这两大神器。
告别过时的Springfox,拥抱Springdoc和Knife4j
Springfox已时过境迁,两年未更新且不支持OpenAPI3标准。而SpringBoot3只支持OpenAPI3规范,因此Springdoc应运而生。
Knife4J是一个强大的工具,可快速生成API文档和调试平台,将Swagger规范转换为易读文档并支持在线API测试。
SpringBoot3整合Knife4j和Springdoc
Knife4j
1. 引入依赖
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
2. 配置Swagger
@Configuration
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("SpringBoot3 Swagger API")
.description("SpringBoot3 Swagger API")
.version("1.0")
.build();
}
}
3. 配置Knife4j
@Configuration
public class Knife4jConfig {
@Bean
@ConditionalOnBean(Docket.class)
public SwaggerProperties swaggerProperties() {
return new SwaggerProperties();
}
@Bean
public RouteLocator swaggerRouteLocator(RouteLocatorBuilder builder, SwaggerProperties swaggerProperties) {
String contextPath = swaggerProperties.getContextPath();
return builder.routes()
.route("knife4j-swagger-ui")
.predicate(PathSelectors.ant(contextPath + "/swagger-ui.html"))
.uri("forward:/knife4j/swagger-ui.html")
.build();
}
}
Springdoc
1. 引入依赖
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.6.12</version>
</dependency>
2. 配置Swagger
@Configuration
public class SwaggerConfig {
@Bean
public OpenAPI openAPI() {
return new OpenAPI()
.info(new Info()
.title("SpringBoot3 Swagger API")
.description("SpringBoot3 Swagger API")
.version("1.0"));
}
@Bean
public UiConfiguration uiConfiguration() {
return UiConfigurationBuilder.builder()
.build();
}
}
3. 配置Springdoc
@Configuration
public class SpringdocConfig {
@Bean
@ConditionalOnBean(OpenAPI.class)
public SwaggerProperties swaggerProperties() {
return new SwaggerProperties();
}
@Bean
public RouteLocator swaggerRouteLocator(RouteLocatorBuilder builder, SwaggerProperties swaggerProperties) {
String contextPath = swaggerProperties.getContextPath();
return builder.routes()
.route("springdoc-swagger-ui")
.predicate(PathSelectors.ant(contextPath + "/swagger-ui.html"))
.uri("forward:/swagger-ui.html")
.build();
}
}
用Springdoc Knife4j为你的SpringBoot3保驾护航
使用Springdoc和Knife4j,你可以轻松生成API文档,在线测试API,解决SpringBoot3兼容性问题,让你的开发更顺畅。告别Springfox,拥抱新时代!
常见问题解答
1. 如何配置Knife4j的上下文路径?
在SwaggerProperties
中设置contextPath
属性即可。
2. 如何使用Springdoc自定义OpenAPI文档?
通过实现OpenAPICustomizer
接口并重写customize
方法进行自定义。
3. 如何解决Swagger文档不显示的问题?
检查依赖是否正确引入,并且确保Swagger和Springdoc配置正确。
4. 如何为Springdoc添加API密钥认证?
使用SecurityRequirement
类和SecurityScheme
类在OpenAPI规范中定义API密钥认证。
5. 如何在Swagger中添加自定义注释?
使用@ApiImplicitParam
和@ApiModelProperty
等注解在Swagger API方法中添加自定义注释。