SpringBoot项目集成Knife4j

本文详细记录了SpringBoot项目中集成Knife4j的步骤,包括引入依赖、配置类设置、过滤拦截路径、访问地址以及启用增强模式。同时,还展示了如何配置多包扫描,确保所有相关Controller都能被正确扫描。
摘要由CSDN通过智能技术生成

Knife4官网

https://doc.xiaominfo.com/knife4j/,根据用户指南可直接集成到项目中,这里就记录一下集成过程。

引入过程

依赖

<!-- knife4j -->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>2.0.9</version>
        </dependency>

配置类

@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfiguration {
    @Bean(value = "defaultApi2")
    public Docket defaultApi2() {
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(new ApiInfoBuilder()
                        .title("标题")
                        .description("描述")
                        .termsOfServiceUrl("http://www.xx.com/")
                        .contact("xxx@qq.com")
                        .version("1.0")
                        .build())
                //分组名称
                .groupName("2.X版本")
                .select()
                //这里指定Controller扫描包路径
                .apis(basePackage("com.xx.controller")
                .paths(PathSelectors.any())
                .build();
        return docket;
    }

过滤拦截路径

项目中有配置拦截,所以需要将knife4j的相关路径放行。
此处使用的是Shiro,根据自己的框架进行不同的配置

		filterMap.put("/swagger-resources", "anon");
        filterMap.put("/swagger-resources/configuration/ui", "anon");
        filterMap.put("/v2/api-docs", "anon");
        filterMap.put("/v2/api-docs-ext", "anon");
        filterMap.put("/doc.html", "anon");
        filterMap.put("/webjars/*", "anon");
        filterMap.put("/favicon.ico", "anon");
	/*
     /swagger-resources
    /swagger-resources/configuration/ui
    /v2/api-docs
    /v2/api-docs-ext
    /doc.html
    /webjars/*
    /favicon.ico
     */

访问

启动项目->访问地址:http://localhost:端口号/项目的context-path/doc.html。以上流程基本实现了简单的导入。

增强模式

使用knife4j-spring-boot-strater组件自动装载在yaml中开启增强模式。

knife4j:
  #开启增强配置
  enable: true
  #开启生产环境屏蔽
  production: false
  basic:
    enable: true
    username: account
    password: password

多包扫描

因为项目中需要扫描的包是分散的,所以需要配置多包扫描。
在Knife4jConfiguration中增加以下方法,将原basePackage重写。

    private static final String splitor = ";";
    
    public static Predicate<RequestHandler> basePackage(final String basePackage) {
        return input -> declaringClass(input).map(handlerPackage(basePackage)::apply).orElse(true);
    }

    private static Function<Class<?>, Boolean> handlerPackage(final String basePackage)     {
        return input -> {
            for (String strPackage : basePackage.split(splitor)) {
                assert input != null;
                boolean isMatch = input.getPackage().getName().startsWith(strPackage);
                if (isMatch) {
                    return true;
                }
            }
            return false;
        };
    }

    private static Optional<Class<?>> declaringClass(RequestHandler input) {
        return Optional.ofNullable(input.declaringClass());
    }

更改docket中扫描包的方法

.apis(basePackage("com.xxx.controller" + splitor + "com.yyy.controller"))

以上集成完毕。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值