【SpringBoot】Swagger&Knif4j接口文档集成

[TOC]

序:接口文档

​ 在开发过程中,接口文档是非常重要的一环,在 Spring Boot 中,我们可以通过集成第三方来实现接口文档的自动生成。

​ 通过注解来描述接口,然后根据这些注解自动生成接口文档,它不仅方便开发者查看和理解接口的功能和参数,还能帮助前后端开发协同工作,提高开发效率。

​ 常用的接口文档,有Swagger和Knife4j,推荐Knife4j 。

  • 作用
    • 方便前后端开发对接
    • 方便沉淀和维护
    • 支持在线调试、在线测试
    • 可以导出接口文档

1 Swagger

Swagger 是一个 RESTful 接口文档的规范和工具集,它的目标是统一 RESTful 接口文档的格式和规范。

1.1 基本信息

  • 官网

    https://swagger.io/

  • Maven中央仓库

    • 后端

      https://mvnrepository.com/artifact/io.springfox/springfox-swagger2

    • 前端

      https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui

1.2 接入步骤

  • 根据maven中央仓库,引入包

    根据SpringBoot选择对应的版本,我的是SpringBoot版本是2.7.15

    • Swagger后端包

      
      
        io.springfox
        springfox-swagger2
        2.9.2
      
    • Swagger前端包

      
      
          io.springfox
          springfox-swagger-ui
          2.9.2
      
  • 创建配置类

    新建SwaggerConfig.java 文件

    package com.leovany.usercenter.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import springfox.documentation.builders.ApiInfoBuilder;
    import springfox.documentation.builders.PathSelectors;
    import springfox.documentation.builders.RequestHandlerSelectors;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.service.Contact;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
    
        @Bean
        public Docket productApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    // 这里一定要标注你控制器的位置
                    .apis(RequestHandlerSelectors.basePackage("com.leovany.usercenter.controller"))
                    .paths(PathSelectors.any())
                    .build();
        }
    
        /**
         * api 信息
         *
         * @return
         */
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("用户中心")
                    .description("用户中心接口文档")
                    .termsOfServiceUrl("https://github.com/leovany")
                    .contact(new Contact("leovany", "https://github.com/leovany", "[email protected]"))
                    .version("v1.0.0")
                    .build();
        }
    
    }
    
  • 配置路径匹配策略

    • 如果 springboot version >= 2.6,需要添加如下配置

      spring:
          mvc:
              pathmatch:
              matching-strategy: ANT_PATH_MATCHER
    • 原因

      Spring MVC 的路径匹配策略是 ant-path-matcher,而 Spring Boot 2.6.x版本的默认匹配策略是 path-pattern-matcher,这就导致启动时报错,错误内容信息:

      Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
      ...
  • 启动项目,输入地址

    地址:http://localhost:8080/swagger-ui.html

    【SpringBoot】Swagger&Knif4j接口文档集成_第1张图片

2 Knife4j

knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案

2.1 基本信息

  • 官网

    https://doc.xiaominfo.com/v2/index.html

  • Maven中央仓库:

    https://mvnrepository.com/artifact/com.github.xiaoymin/knife4j-spring-boot-starter

  • 接入文档

    https://doc.xiaominfo.com/v2/documentation/

2.2 接入步骤

  • 根据maven中央仓库,引入包

    根据SpringBoot选择对应的版本,我的是SpringBoot版本是2.7.15

    
    
        com.github.xiaoymin
        knife4j-spring-boot-starter
        3.0.3
    
  • 创建配置类

    新建Knife4jConfig.java 文件

    package com.leovany.usercenter.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Profile;
    import springfox.documentation.builders.ApiInfoBuilder;
    import springfox.documentation.builders.PathSelectors;
    import springfox.documentation.builders.RequestHandlerSelectors;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.service.Contact;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
    
    /**
     * 自定义 Knife4j 接口文档的配置
     */
    @Configuration
    @EnableSwagger2
    public class Knife4jConfig {
    
        @Bean(value = "defaultApi2")
        public Docket defaultApi2() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    // 项目controller的位置
                    .apis(RequestHandlerSelectors.basePackage("com.leovany.usercenter.controller"))
                    .paths(PathSelectors.any())
                    .build();
        }
    
        /**
         * api 信息
         *
         * @return
         */
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("用户中心")
                    .description("用户中心接口文档")
                    .termsOfServiceUrl("https://github.com/leovany")
                    .contact(new Contact("leovany", "https://github.com/leovany", "[email protected]"))
                    .version("1.0.0")
                    .build();
        }
    }
    
  • 配置路径匹配策略

    • 如果 springboot version >= 2.6,需要添加如下配置

      spring:
          mvc:
              pathmatch:
              matching-strategy: ANT_PATH_MATCHER
    • 原因

      Spring MVC 的路径匹配策略是 ant-path-matcher,而 Spring Boot 2.6.x版本的默认匹配策略是 path-pattern-matcher,这就导致启动时报错,错误内容信息:

      Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
      ...
  • 配置是否屏蔽文档接口

    在文件application.yml配置,生产环境注意防止暴露接口文档(production设置为true)

    knife4j:
      # 开启增强配置
      enable: true
      # 是否屏蔽接口文件(true=屏蔽,false=不屏蔽)
      production: false
  • 启动项目,输入地址

    地址:http://localhost:8080/doc.html

    【SpringBoot】Swagger&Knif4j接口文档集成_第2张图片

你可能感兴趣的:(Java)