前言:以前用swagger的时候,可以在接口上直接用自定义注解标记版本,但是需要配置Docket,knife4j-openapi3废弃掉Docket换成GroupedOpenApi了,所以需要做一些改动。
java
<!-- Knife4j for Spring Boot 3.x -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.5.0</version>
</dependency>
- 自定义注解
java
package com.xx.config;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* swagger 版本注解
*
* @author maomo
* @version 1.0.0
* @date 2022/9/30
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ApiVersion {
/**
* 接口版本号(对应swagger中的group)
* @return String[]
*/
String[] group();
}
2.1 以前用swagger的时候,swaggerConfig里的写法是:
java
@Bean
public Docket v100(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName("v1.0.0")
.select()
.apis(input -> {
ApiVersion apiVersion = input.getHandlerMethod().getMethodAnnotation(ApiVersion.class);
return apiVersion != null && Arrays.asList(apiVersion.group()).contains("v1.0.0");
})//controller路径
.paths(PathSelectors.any())
.build();
}
@Bean
public Docket v110(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName("v1.1.0")
.select()
.apis(input -> {
ApiVersion apiVersion = input.getHandlerMethod().getMethodAnnotation(ApiVersion.class);
return apiVersion != null && Arrays.asList(apiVersion.group()).contains("v1.1.0");
})//controller路径
.paths(PathSelectors.any())
.build();
}
2.2 现在springboot3+knife4j-openapi3的写法是:
java
@Bean
public GroupedOpenApi V100() {
return GroupedOpenApi.builder()
.group("v1.0.0")
.addOpenApiMethodFilter(method -> {
// 获取方法上的 @ApiVersion 注解
ApiVersion apiVersion = method.getAnnotation(ApiVersion.class);
// 判断是否包含当前版本
return apiVersion != null &&
Arrays.asList(apiVersion.group()).contains("v1.0.0");
})
.packagesToScan("com.wyzz.controller") // 指定扫描的包
.build();
}
@Bean
public GroupedOpenApi V110() {
return GroupedOpenApi.builder()
.group("v1.1.0")
.addOpenApiMethodFilter(method -> {
// 获取方法上的 @ApiVersion 注解
ApiVersion apiVersion = method.getAnnotation(ApiVersion.class);
// 判断是否包含当前版本
return apiVersion != null &&
Arrays.asList(apiVersion.group()).contains("v1.1.0");
})
.packagesToScan("com.wyzz.controller") // 指定扫描的包
.build();
}