自学内容网 自学内容网

多模块集成swagger(knife4j-spring-boot-starter)

前言

单体项目、多模块单体项目、微服务项目,集成的方案大同小异,微服务会在网关做个聚合,后面再补充。

依赖版本

目前demo的版本如下:

  1. spring boot 2.7.3
  2. spring cloud 2021.0.4
  3. spring cloud alibaba 2021.0.4.0
  4. knife4j-spring-boot-starter 3.0.3

从零开始

多模块引入swagger:

  1. 新建多模块项目
  2. 新建ms-common-swagger(作用:swagger的相关依赖及定义)
  3. 新建ms-module-system(业务服务,可能还有服务a、b、c)
  4. 在system服务引入swagger
  5. 使用@Api等注解
第一步,新建多模块项目

第二步,新建ms-common-swagger

只需要一个jar

<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
第三步,新建ms-module-system

引入ms-common-swagger

<dependency>
    <groupId>com.ms</groupId>
    <artifactId>ms-domain-system</artifactId>
</dependency>

配置项:

 spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

不配置上述ant_path_matcher会导致问题!

在这里插入图片描述
Failed to start bean 'documentationPluginsBootstrapper'
具体原因没深究,有兴趣自行研究,网上相关资料描述是spring boot 2.6引入的路径匹配策略和springfox不兼容

到底需要不需要配置类或者注解或者配置?

对于配置类,默认的扫描策略没具体研究,从结果看,都会被扫。
但是接口文档关注点应该是业务类接口,一种是通过包路径、一种是通过注解,所以配置类最好是配置上。

@Configuration
public class SwaggerConfig {
    @Bean
    public Docket webApiConfig() {
        System.out.println("swagger docker被注册");
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
//                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build();
    }
}

对于注解,比如@EnableSwagger2或@EnableKnife4j,是不需要的


对于配置项,开启可不需要,关闭需要(enable是增强处理,production是关闭文档访问)

knife4j:
  enable: true
  production: true

在这里插入图片描述


原文地址:https://blog.csdn.net/qq_31854267/article/details/143857526

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!