当前位置:   article > 正文

Swagger【knife4j升级版】生成接口开发文档以及功能调试_后端调试 knife

后端调试 knife

简介

一般来说,接口文档是需要咱们后台开发人员来提供的,或者架构师,接口文档的形式有许多种,任何形式都是可以的。例如

  • word文档
  • md文档
  • html文档
  • 嘴说(这个权当玩笑),发邮件(企业聊天记录), 需求api确认

那么就出现了一个问题:如上所示需要开发人员 编写接口文档岂不是很累?要写许多的请求路径 和参数 以及示例值,工作强度大,时间耗费,所以我们开发人员可使用一些程序帮我们一键生成接口文档,那么这个技术可以使用:swagger 以及升级版的knife4j 后面我们会使用到。

接口文档必须包含:

  1. 接口说明
  2. 请求地址
  3. 请求方法
  4. 请求参数
  5. 响应结果
1. Swagger介绍

(1)简介

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(https://swagger.io/)。 它的主要作用是:

  1. 使得前后端分离开发更加方便,有利于团队协作

  2. 接口的文档在线自动生成,降低后端开发人员编写接口文档的负担

  3. 功能测试

    Spring已经将Swagger纳入自身的标准,建立了Spring-swagger项目,现在叫Springfox。通过在项目中引入Springfox ,即可非常简单快捷的使用Swagger。

(2)SpringBoot集成Swagger

  • 引入依赖,在【itheima-leadnews】模块中引入该依赖

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 在工程的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;

import java.util.HashSet;

@Configuration
@EnableSwagger2
public class SwaggerConfiguration {

   @Bean
   public Docket buildDocket() {
      HashSet<String> strings = new HashSet<>();
      strings.add("application/json");

      return new Docket(DocumentationType.SWAGGER_2)
              .apiInfo(buildApiInfo())
              //设置返回值数据类型为json
              .produces(strings)
              .select()
              // 要扫描的API(Controller)基础包
              .apis(RequestHandlerSelectors.basePackage("com.leannews"))
              .paths(PathSelectors.any())
              .build();
   }

   private ApiInfo buildApiInfo() {
      Contact contact = new Contact("Zengfl","","");
      return new ApiInfoBuilder()
              .title("xxx系统-平台管理API文档")
              .description("平台管理服务api")
              .contact(contact)
              .version("1.0.0").build();
   }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

启动工程后访问:http://localhost:9001/swagger-ui.html

(3)Swagger常用注解

@Api:修饰整个类,描述Controller的作用

@ApiOperation:修饰类的一个方法 标识 操作信息 接口的定义

@ApiParam:单个参数的描述信息

@ApiModel:描述使用到的对象信息

@ApiModelProperty:描述使用到的对象的属性信息

@ApiResponse:HTTP响应其中1个描述

@ApiResponses:HTTP响应整体描述

@ApiIgnore:使用该注解忽略这个API

@ApiError :发生错误返回的信息

@ApiImplicitParam:一个请求参数

@ApiImplicitParams:多个请求参数的描述信息

@ApiImplicitParam属性:

属性取值作用
paramType查询参数类型
path以地址的形式提交数据
query直接跟参数完成自动映射赋值
body以流的形式提交 仅支持POST
header参数在request headers 里边提交
form以form表单的形式提交 仅支持POST
dataType参数的数据类型 只作为标志说明,并没有实际验证
Long
String
name接收参数名
value接收参数的意义描述
required参数是否必填
true必填
false非必填
defaultValue默认值
https://blog.csdn.net/ThinkWon/article/details/107477801
  • 1

我们在controller中添加Swagger注解,代码如下所示:

@Api(tags = "频道管理")
public class AdChannelController {
    
}
  • 1
  • 2
  • 3
  • 4

在vo,dto或实体类中添加api相关注解:

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;

@Data
@ApiModel(value="PageRequestDto", description="通用分页查询参数")
public class PageRequestDto implements Serializable {

    @ApiModelProperty(notes = "每页大小", dataType="Long")
    private Long size;
    @ApiModelProperty(notes = "页码", dataType="Long")
    private Long page;

    public void checkParam() {
        if (this.page == null || this.page < 0) {
            setPage(1l);
        }
        if (this.size == null || this.size < 0 || this.size > 100) {
            setSize(10l);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

启动微服务,访问地址:http://localhost:9001/swagger-ui.html

官方的注解说明如下:

https://github.com/swagger-api/swagger-core/wiki/Annotations-1.5.X
  • 1
7.4.3 knife4j

(1)简介

knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍!

gitee地址:https://gitee.com/xiaoym/knife4j

官方文档:https://doc.xiaominfo.com/

效果演示:http://knife4j.xiaominfo.com/doc.html

(2)核心功能

该UI增强包主要包括两大核心功能:文档说明 和 在线调试

  • 文档说明:根据Swagger的规范说明,详细列出接口文档的说明,包括接口地址、类型、请求示例、请求参数、响应示例、响应参数、响应码等信息,使用swagger-bootstrap-ui能根据该文档说明,对该接口的使用情况一目了然。
  • 在线调试:提供在线接口联调的强大功能,自动解析当前接口参数,同时包含表单验证,调用参数可返回接口响应内容、headers、Curl请求命令实例、响应时间、响应状态码等信息,帮助开发者在线调试,而不必通过其他测试工具测试接口是否正确,简介、强大。
  • 个性化配置:通过个性化ui配置项,可自定义UI的相关显示信息
  • 离线文档:根据标准规范,生成的在线markdown离线文档,开发者可以进行拷贝生成markdown接口文档,通过其他第三方markdown转换工具转换成html或pdf,这样也可以放弃swagger2markdown组件
  • 接口排序:自1.8.5后,ui支持了接口排序功能,例如一个注册功能主要包含了多个步骤,可以根据swagger-bootstrap-ui提供的接口排序规则实现接口的排序,step化接口操作,方便其他开发者进行接口对接

(3)快速集成

  • 在需要生成接口的工程中pom.xml文件中引入knife4j的依赖,并【删除掉原来的swagger的依赖】如下:
<dependency>
     <groupId>com.github.xiaoymin</groupId>
     <artifactId>knife4j-spring-boot-starter</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4

注意,如果是高版本springboot已经去除掉了validation 还需要在工程中添加依赖,因为knife4j需要使用到他

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 创建Swagger配置文件,和swagger一样
  • 把swageer的依赖替换掉就行,因为knife4j底层用的就是swagger,所有注解是通用的,在配置类上新增一个注解即可@EnableKnife4j

以上有两个注解需要特别说明,如下表:

注解说明
@EnableSwagger2该注解是Springfox-swagger框架提供的使用Swagger注解,该注解必须加
@EnableKnife4j该注解是knife4j提供的增强注解,Ui提供了例如动态参数、参数过滤、接口排序等增强功能,如果你想使用这些增强功能就必须加该注解,否则可以不用加

修改AdChannelController添加Api说明
添加好了后就可以启动微服务啦,然后通过地址访问,下载接口文档,也可以在此页面调试功能,very good!

  • 访问

在浏览器输入地址:http://localhost:9001/doc.html

如图所示:

在这里插入图片描述
如此就可以在文档管理功能里面下载离线文档发给前端,
还可以在自定义的如【频道管理】进行功能调试,这样就不需要postman这个工具了

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号