springboot3、knife4j-openapi3配置动态接口版本管理

前言:以前用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>
  1. 自定义注解
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();
    }
相关推荐
吴声子夜歌几秒前
Java——线程的中断
java·中断
吴声子夜歌几秒前
状态机——SpringStateMachine嵌套状态流转
java·状态机·嵌套状态
Jul1en_1 分钟前
【SpringCloud】微服务 Sentinel 详解
java·spring·sentinel
Xin_ye100862 分钟前
C# 零基础到精通教程 - 第十二章:异常处理与调试——让程序更健壮
开发语言·c#
楼田莉子4 分钟前
C#学习之C#入门学习
开发语言·后端·学习·c#
我命由我123454 分钟前
PHP - PHP 简易 Web 服务器、基础接口开发
服务器·开发语言·前端·php·intellij-idea·idea·intellij idea
Reload.5 分钟前
CZ航司,shopping JS逆向 acw_sc__v2
开发语言·javascript·python·网络爬虫·ecmascript
码界筑梦坊6 分钟前
130-基于Python的体育用品销售数据可视化分析系统
开发语言·python·信息可视化·flask·毕业设计
码界筑梦坊7 分钟前
131-基于Flask的美国新泽西州自动售货机销售数据可视化分析系统
开发语言·python·信息可视化·数据分析·flask·毕业设计
闪电悠米8 分钟前
黑马点评短信登录01_session_sms_login
java·spring boot·redis·git·spring·面试