关于springboot:笑小枫的SpringBoot系列二基于swagger2的knife4j接口文档

2 配置后端接口

2.1 什么是knife4j😴

Knife4j的前身是swagger-bootstrap-ui,前身swagger-bootstrap-ui是一个纯swagger-uiui皮肤我的项目

一开始我的项目初衷是为了写一个加强版本的swagger的前端ui,然而随着我的项目的倒退,面对越来越多的个性化需要,不得不编写后端Java代码以满足新的需要,在swagger-bootstrap-ui的1.8.5~1.9.6版本之间,采纳的是后端Java代码和Ui都混合在一个Jar包外面的形式提供给开发者应用.这种形式虽说对于集成swagger来说很不便,只须要引入jar包即可,然而在微服务架构下显得有些臃肿。

因而,我的项目正式更名为knife4j,取名knife4j是心愿她能像一把匕首一样玲珑,轻量,并且性能强悍,更名也是心愿把她做成一个为Swagger接口文档服务的通用性解决方案,不仅仅只是专一于前端Ui前端.

swagger-bootstrap-ui的所有个性都会集中在knife4j-spring-ui包中,并且后续也会满足开发者更多的个性化需要.

次要的变动是,我的项目的相干类包门路更换为com.github.xiaoymin.knife4j前缀,开发者应用加强注解时须要替换包门路

后端Java代码和ui包拆散为多个模块的jar包,以面对在目前微服务架构下,更加不便的应用加强文档注解(应用SpringCloud微服务项目,只须要在网关层集成UI的jar包即可,因而拆散前后端)

knife4j沿用swagger-bootstrap-ui的版本号,第1个版本从1.9.6开始,对于应用办法,请参考文档。

2.2 怎么应用knife4j

👉第一步:在maven我的项目的pom.xml中引入Knife4j的依赖包,代码如下:👇

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>2.0.7</version>
</dependency>

👉第二步:创立Swagger配置依赖,代码如下:👇

package com.maple.demo.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.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;

/**
 * @author 笑小枫
 * @date 2022/6/28
 */
@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfiguration {

    @Bean(value = "example")
    public Docket example() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(new ApiInfoBuilder()
                        .title("笑小枫实例演示接口")
                        .description("笑小枫实例演示接口")
                        .termsOfServiceUrl("http://127.0.0.1:6666")
                        .contact(new Contact("笑小枫", "https://www.xiaoxiaofeng.site", "zfzjava@163.com"))
                        .version("1.0")
                        .build())
                //分组名称
                .groupName("演示实例接口")
                .select()
                //这里指定Controller扫描包门路
                .apis(RequestHandlerSelectors.basePackage("com.maple.demo.controller"))
                .paths(PathSelectors.any())
                .build();
    }
}

👉第三步:创立一个Controller👇

package com.maple.demo.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author zhangfuzeng
 * @date 2022/6/30
 */
@Api(tags = "实例演示-Knife4j接口文档")
@RestController
@RequestMapping("/example")
public class TestKnife4jController {
    
    @ApiOperation(value = "Knife4j接口文档演示")
    @GetMapping("/testKnife4j")
    public Test testKnife4j(Test param) {
        Test test = new Test();
        test.setName("笑小枫");
        test.setAge(18);
        test.setRemark("大家好,我是笑小枫,喜爱我的小伙伴点个赞呗,欢送拜访我的集体博客:http://www.xiaoxiaofeng.site");
        return test;
    }

    @Data
    static class Test {
        @ApiModelProperty(value = "姓名")
        private String name;

        @ApiModelProperty(value = "年龄")
        private Integer age;

        @ApiModelProperty(value = "形容")
        private String remark;
    }
}

2.3 看下页面成果👌

我的项目启动后,在浏览器输出http://127.0.0.1:6666/doc.html拜访

接口调试:

2.4 加强模式😦

Knife4j自2.0.6版本开始,将目前在Ui界面中一些个性化配置剥离,开发者能够在后端进行配置,并且提供的knife4j-spring-boot-strater组件主动装载

spring.factories配置如下:

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.github.xiaoymin.knife4j.spring.configuration.Knife4jAutoConfiguration

在Spring Boot配置文件中,残缺的配置如下:

knife4j:
  enable: true
  documents:
    -
      group: 2.X版本
      name: 接口签名
      locations: classpath:sign/*
  setting:
    language: zh-CN
    enableSwaggerModels: true
    enableDocumentManage: true
    swaggerModelName: 实体类列表
    enableVersion: false
    enableReloadCacheParameter: false
    enableAfterScript: true
    enableFilterMultipartApiMethodType: POST
    enableFilterMultipartApis: false
    enableRequestCache: true
    enableHost: false
    enableHostText: 192.168.0.193:8000
    enableHomeCustom: true
    homeCustomLocation: classpath:markdown/home.md
    enableSearch: false
    enableFooter: false
    enableFooterCustom: true
    footerCustomContent: Copyright  2022-[笑小枫](https://www.xiaoxiaofeng.site)
    enableDynamicParameter: false
    enableDebug: true
    enableOpenApi: false
    enableGroup: true
  cors: false
  production: false
  basic:
    enable: false
    username: test
    password: 123123

在以前的版本中,开发者须要在配置文件中手动应用@EnableKnife4j来应用加强,自2.0.6版本后,只须要在配置文件中配置knife4j.enable=true即可不在应用注解

留神:要应用Knife4j提供的加强,knife4j.enable=true必须开启

各个配置属性阐明如下:

属性 默认值 阐明值
knife4j.enable false 是否开启Knife4j加强模式
knife4j.cors false 是否开启一个默认的跨域配置,该性能配合自定义Host应用
knife4j.production false 是否开启生产环境保护策略,详情参考文档
knife4j.basic 对Knife4j提供的资源提供BasicHttp校验,爱护文档
knife4j.basic.enable false 敞开BasicHttp性能
knife4j.basic.username basic用户名
knife4j.basic.password basic明码
knife4j.documents 自定义文档汇合,该属性是数组
knife4j.documents.group 所属分组
knife4j.documents.name 相似于接口中的tag,对于自定义文档的分组
knife4j.documents.locations markdown文件门路,能够是一个文件夹(classpath:markdowns/*),也能够是单个文件(classpath:md/sign.md)
knife4j.setting 前端Ui的个性化配置属性
knife4j.setting.enableAfterScript true 调试Tab是否显示AfterScript性能,默认开启
knife4j.setting.language zh-CN Ui默认显示语言,目前次要有两种:中文(zh-CN)、英文(en-US)
knife4j.setting.enableSwaggerModels true 是否显示界面中SwaggerModel性能
knife4j.setting.swaggerModelName Swagger Models 重命名SwaggerModel名称,默认
knife4j.setting.enableDocumentManage true 是否显示界面中”文档治理”性能
knife4j.setting.enableReloadCacheParameter false 是否在每个Debug调试栏后显示刷新变量按钮,默认不显示
knife4j.setting.enableVersion false 是否开启界面中对某接口的版本控制,如果开启,后端变动后Ui界面会存在小蓝点
knife4j.setting.enableRequestCache true 是否开启申请参数缓存
knife4j.setting.enableFilterMultipartApis false 针对RequestMapping的接口申请类型,在不指定参数类型的状况下,如果不过滤,默认会显示7个类型的接口地址参数,如果开启此配置,默认展现一个Post类型的接口地址
knife4j.setting.enableFilterMultipartApiMethodType POST 具体接口的过滤类型
knife4j.setting.enableHost false 是否启用Host
knife4j.setting.enableHomeCustom false 是否开启自定义主页内容
knife4j.setting.homeCustomLocation 主页内容Markdown文件门路
knife4j.setting.enableSearch false 是否禁用Ui界面中的搜寻框
knife4j.setting.enableFooter true 是否显示Footer
knife4j.setting.enableFooterCustom false 是否开启自定义Footer
knife4j.setting.footerCustomContent false 自定义Footer内容
knife4j.setting.enableDynamicParameter false 是否开启动静参数调试性能
knife4j.setting.enableDebug true 启用调试
knife4j.setting.enableOpenApi true 显示OpenAPI标准
knife4j.setting.enableGroup true 显示服务分组

对于个性化文档(knife4j.documents)以及个性化设置(knife4j.setting),有一些轻微的区别,开发者在配置文件中进行配合好后,还须要在创立Docket对象时调用Knife4j提供的扩大Extesions进行赋值

示例代码如下:

package com.maple.demo.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.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;

/**
 * @author 笑小枫
 * @date 2022/6/28
 */
@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfiguration {
    /*引入Knife4j提供的扩大类*/
    private final OpenApiExtensionResolver openApiExtensionResolver;

    @Autowired
    public SwaggerConfiguration(OpenApiExtensionResolver openApiExtensionResolver) {
        this.openApiExtensionResolver = openApiExtensionResolver;
    }

    @Bean(value = "example")
    public Docket example() {
        String groupName="演示实例接口";
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(new ApiInfoBuilder()
                        .title("笑小枫实例演示接口")
                        .description("笑小枫实例演示接口")
                        .termsOfServiceUrl("http://127.0.0.1:6666")
                        .contact(new Contact("笑小枫", "http://www.xiaoxiaofeng.site", "zfzjava@163.com"))
                        .version("1.0")
                        .build())
                //分组名称
                .groupName(groupName)
                .select()
                //这里指定Controller扫描包门路
                .apis(RequestHandlerSelectors.basePackage("com.maple.demo.controller"))
                .paths(PathSelectors.any())
                .build()
                //赋予插件体系
                .extensions(openApiExtensionResolver.buildExtensions(groupName));
    }
}

buildExtensions办法须要传入分组名称,该分组名称次要是为了辨别开发者在构建自定义文档时,在不同的Docket逻辑分组下进行区别显示。

OpenApiExtensionResolver辅助类须要配置knife4j.enable=true能力主动@Autowired

加强成果开启后,在最终调用接口时,Knife4j会增加扩大属性x-openapi,如下图:

更多功能,请参考官网文档:https://doc.xiaominfo.com/knife4j/

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理