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

TOC

序:接口文档

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

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

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

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

1 Swagger

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

1.1 基本信息

1.2 接入步骤

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

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

    • Swagger后端包

      xml 复制代码
      <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
      <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
      </dependency>
    • Swagger前端包

      xml 复制代码
      <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
      <dependency>
          <groupId>io.springfox</groupId>
          <artifactId>springfox-swagger-ui</artifactId>
          <version>2.9.2</version>
      </dependency>
  • 创建配置类

    新建SwaggerConfig.java 文件

    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", "xxx@qq.com"))
                    .version("v1.0.0")
                    .build();
        }
    
    }
  • 配置路径匹配策略

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

      yaml 复制代码
      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

2 Knife4j

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

2.1 基本信息

2.2 接入步骤

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

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

    java 复制代码
    <!--  https://mvnrepository.com/artifact/com.github.xiaoymin/knife4j-spring-boot-starter -->
    <dependency>
        <groupId>com.github.xiaoymin</groupId>
        <artifactId>knife4j-spring-boot-starter</artifactId>
        <version>3.0.3</version>
    </dependency>
  • 创建配置类

    新建Knife4jConfig.java 文件

    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", "xxx@qq.com"))
                    .version("1.0.0")
                    .build();
        }
    }
  • 配置路径匹配策略

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

      yaml 复制代码
      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)

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

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

相关推荐
中电金信3 分钟前
从业务调优到分层缓存:DeepSeek V4 Flash的PPU实践
java·开发语言
snow@li9 分钟前
ruoyi-vue-pro/芋道源码:一键改包名/用项目自带的 ‌ProjectReactor‌ 程序/彻底、省事
java
熊出没13 分钟前
CommitLoom 使用教程:在 IntelliJ IDEA 中自动生成 Git 提交信息
java·git·intellij-idea
步行cgn30 分钟前
Spring MVC POST 请求乱码:原因与完整解决方案
java·spring·mvc
y1su32 分钟前
Leetcode 链表,树,回溯 模板
java·leetcode·链表
qianyuqiye136 分钟前
K8s 命名空间与 Pod 入门:从概念到实战
java·docker·kubernetes
牧瀬クリスだ1 小时前
观察者模式:一个对象变化,一群对象自动响应
java·观察者模式·设计模式
小张成长计划..1 小时前
【Linux】26:线程互斥和同步
java·开发语言
邪修king3 小时前
Re:Linux 系统篇(三十五):进程间通信Chapter2:从匿名管道到进程池:Linux 进程间通信实战(深度理解「先描述,再组织」)
java·linux·运维
拆房老料4 小时前
【第四部分:Agentic 智能体设计模式】16. 一个 Prompt 搞不定复杂任务?试试 Prompt Chaining
java·前端·人工智能·设计模式·prompt