铁佛 发表于 2024-3-5 06:42:44

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

目录

[*]序:接口文档
[*]1 Swagger

[*]1.1 基本信息
[*]1.2 接入步骤

[*]2 Knife4j

[*]2.1 基本信息
[*]2.2 接入步骤


序:接口文档

​        在开发过程中,接口文档是非常重要的一环,在 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前端包
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

[*]创建配置类
新建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", "xxx@qq.com"))
                .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
https://img2023.cnblogs.com/other/3272173/202312/3272173-20231228000302721-607818813.png
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
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>
[*]创建配置类
新建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", "xxx@qq.com"))
                .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
https://img2023.cnblogs.com/other/3272173/202312/3272173-20231228000304766-1404486841.png
本文由博客一文多发平台 OpenWrite 发布!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 【SpringBoot】Swagger&Knif4j接口文档集成