SpringBoot项目整合Knife4J

news2024/11/22 22:15:22

SpringBoot项目整合Knife4J

  • 前言
    • 为什么要使用API文档
    • 什么是API文档
  • Knife4j
    • Knife4j的进化史
    • Swagger和Knife4J的关系
  • SpringBoot整合Knife4j
    • 版本适配
    • 实现步骤
      • 1.导入依赖
      • 2.编写配置类
      • 新建一个controller进行测试
      • 启动项目
    • Knife4j增强配置
    • 常用注解
      • 例子展示
        • 实体类注解
        • Controller注解
  • Knife4j文档导出
    • 实现步骤
      • 1.进入Apifox选择导入项目
      • 2.选择Knife4j进行导入
      • 导入项目
      • 选择模块导入
      • 发送请求
  • 结语

😀大家好!我是向阳🌞,一个想成为优秀全栈开发工程师的有志青年!
📔今天我们来介绍在前后端脱离开发项目中我们会使用到的一款强大的API规范文档的框架——Knife4J。

前言

为什么要使用API文档

首先我们要明白我们为什么要去使用API文档,在前后端脱离开发的情况下,前端程序员无法实时的知道后端接口开发的进度,后端程序员总不能每开发完一个接口或者更新一次接口就去wx上去跟前端程序员说,嘿!哥们哥们,我新增了一个接口,这个接口是这样这样子…这样沟通的成本也太高了,而且有时候还说不明白,搞得双方都很难受😢,在这样的情况下,API文档应运而生。


请添加图片描述

什么是API文档

API 文档是开发者了解 API 功能和如何正确使用的主要来源。它提供了详细的指导,包括请求格式、参数说明、响应结构等,API 文档的重要性在于它作为应用程序编程接口的纲要,为开发者提供了关键的信息,帮助他们正确、高效地使用和集成特定的 API。

Knife4j

官方文档:https://doc.xiaominfo.com/docs/quick-start
开源地址:https://gitee.com/xiaoym/knife4j


在这里插入图片描述

我们来简单介绍一下Knife4j。knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名knife4j是希望她能像一把匕首一样小巧,轻量,并且功能强悍!

knife4j的前身是swagger-bootstrap-ui,为了契合微服务的架构发展,由于原来swagger-bootstrap-ui采用的是后端Java代码+前端Ui混合打包的方式,在微服务架构下显的很臃肿,因此项目正式更名为knife4j。

Knife4j的进化史

Knife4j从开源至今,目前主要经历版本的变化,分别如下:

版本说明
1.0~1.9.6名称是叫swagger-bootstrap-ui,蓝色风格Ui
1.9.6蓝色皮肤风格,开始更名,增加更多后端模块
2.0~2.0.5Ui基于Vue2.0+AntdV重写,黑色风格,参考示例,底层依赖的springfox框架版本是2.9.2,仅提供Swagger2规范的适配
2.0.6~2.0.9底层springfox框架版本升级至2.10.5,仅提供Swagger2规范的适配
3.0~3.0.3底层依赖springfox框架版本升级至3.0.3,OpenAPI规范是v3,过度版本,建议开发者不要使用
4.0~区分OpenAPI2和Swagger3的Maven坐标artifactId
OpenAPI2规范服务端解析框架稳定在springfox2.10.5
OpenAPI3框架服务端解析跟随springdoc项目更新迭代

Swagger和Knife4J的关系

博主在刚接触Knife4j的时候觉得这和Swagger没什么区别嘛,都是API规范文档的框架,在查阅了部分资料后,知道了他们两个直接的联系。

Knife4j是Swagger-UI的增强版,它是在Swagger-UI的基础上进行了改进和优化,提供了更加完善的交互体验和更加美观的UI设计。同时,它也提供了更多的扩展功能,例如在线调试和多语言支持等。

其实看完Knife4j官方文档的介绍后也差不多知道Knife4j是Swagger的升级版

名称开发语言&框架状态最后版本风格
Knife4jJava、JavaScript、Vue持续更新黑色
swagger-bootstrap-uiJava、JavaScript、jQuery停更1.9.6蓝色

SpringBoot整合Knife4j

okk,接下来进行我们的正题,SpringBoot项目如何接入Knife4j。

版本适配

但是在这之前我们要清楚Knife4j与SpringBoot版本之间的关系。

Spring Boot版本Knife4j Swagger2规范Knife4j OpenAPI3规范
1.5.x~2.0.0<Knife4j 2.0.0>=Knife4j 4.0.0
2.0~2.2Knife4j 2.0.0 ~ 2.0.6>=Knife4j 4.0.0
2.2.x~2.4.0Knife4j 2.0.6 ~ 2.0.9>=Knife4j 4.0.0
2.4.0~2.7.x>=Knife4j 4.0.0>=Knife4j 4.0.0
>= 3.0>=Knife4j 4.0.0>=Knife4j 4.0.0

由于目前绝大部分项目使用的还是JDK8,Knife4j OpenAPI3需要JDK版本在17及以上,所以我们就不作介绍。我们这块介绍的是SpringBoot版本在2.4.0~2.7.x,Knife4j版本在 >= 4.0.0,使用Knife4j要注意版本的问题。

实现步骤

1.导入依赖

自4.0版本开始,maven组件的artifactId已经发生了变化。

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
    <version>{maven仓库最新版本}</version>
</dependency>

在4.0版本之前,maven坐标如下:

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>{<4.0.0版本}</version>
</dependency>

2.编写配置类

给大家看一下我的项目架构,在Knife4jConfig下编写配置类。
在这里插入图片描述

/**
 * Knife4j配置类
 */
@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(new ApiInfoBuilder()
                        // 网站标题
                        .title("向阳的Swagger文档")
                        // 描述 可以穿插md语法
                        .description("# 这是描述!")
                        // 服务条款
                        .termsOfServiceUrl("......")
                        // 设置作者 服务器url 邮箱
                        .contact(new Contact("向阳", "http://localhost:9999/demo", "xxx"))
                        // 许可证
                        .license("...")
                        // 许可证url
                        .licenseUrl("....")
                        // 版本
                        .version("1.0")
                        .build())
                .groupName("test测试组")
                .select()
                // 要扫描的包
                .apis(RequestHandlerSelectors.basePackage("com.shousi.knife4jdemo.controller"))
                // 要扫描的url
                .paths(PathSelectors.any())
                .build();
    }
}

新建一个controller进行测试

下面是我创建的一个测试接口,类命为TestController。

@Api(tags = "测试模块")
@RestController
@RequestMapping("/test")
public class TestController {
    @GetMapping("/world")
    public String world(){
        return "world knife4j";
    }

    @ApiOperation(value = "打招呼")
    @GetMapping("/hello")
    @ApiImplicitParam(name = "name", value = "姓名", required = true)
    public String hello(@RequestParam("name") String name){
        return "hello" + name;
    }
}

启动项目

启动项目,访问http://localhost:端口号/doc.html。即可进入API文档。
在这里插入图片描述

Knife4j增强配置

在yml配置文件中添加增强配置,在第一次进入API管理文档时需要填写账号、密码,防止网址泄露让外来人员进行破坏。

knife4j:
  enable: true
  # 开启Swagger的Basic认证功能,默认是false
  basic:
    enable: true
    # 用户名
    username: root
    # 密码
    password: 123456

同样可以设置productionfalse,在生产环境下不开放Knife4j。

knife4j:
  production: false

常用注解

注解解释相关参数
@Api对某个Controller进行详细描述tags:该controller的名称
@ApiOperation对某个接口/方法进行详细描述value:该接口的详细名称/功能
@ApiImplicitParam对某个接口/方法的单个参数进行详细描述name:参数的名称
value:参数的描述
required:是否必填
dataType:参数类型
@ApiImplicitParams对某个接口/方法的多个参数进行详细描述name:参数的名称
value:参数的描述
required:是否必填
dataType:参数类型
@ApiModel对某个实体类的基本信息进行描述description:实体类的描述
@ApiModelProperty对某个实体类的每个属性的进行详细描述name:参数的名称
value:参数的描述
required:是否必填
dataType:参数类型

例子展示

实体类注解

当然也可以对实体类进行更详细的配置,例如设置dataType属性类型、required是否必须填写。
在这里插入图片描述

Controller注解

在这里插入图片描述

Knife4j文档导出

相信大家应该都使用过Apifox这款API文档(如果没有使用过可以在评论区留言,下一期可以详细介绍一下),可以将项目的Knife4j文档导入Apifox当中,我们不再用去一步一步手搓文档

实现步骤

1.进入Apifox选择导入项目

在这里插入图片描述

2.选择Knife4j进行导入

注意!如果你添加了增强配置,需要填写yml配置文件中对应的账户和密码,填写完毕后进行提交
在这里插入图片描述

导入项目

如果没有项目目录进行新建,如果有的话则选择已有的目录。在这里插入图片描述

选择模块导入

如果是第一次导入的话,建议全部导入,如果需要筛选则自行选择。
在这里插入图片描述

发送请求

发送请求后,我们发现可以正常使用,这样就大功告成啦。
在这里插入图片描述

结语

正确的使用Knife4j可以大大节省时间、开发成本,学会使用Knife4j还是十分重要的!有关于Knife4j的后续以及一些高级用法也会继续更新,希望大家可以多多关注。


请添加图片描述

——👦[作者]:向阳256
——⏳[更新]:2024.10.19
——🥰本人技术有限,如果有不对指正需要更改或者有更好的方法,欢迎到评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2224265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【大数据学习 | kafka】kafuka的基础架构

1. kafka是什么 Kafka是由LinkedIn开发的一个分布式的消息队列。它是一款开源的、轻量级的、分布式、可分区和具有复制备份的&#xff08;Replicated&#xff09;、基于ZooKeeper的协调管理的分布式流平台的功能强大的消息系统。与传统的消息系统相比&#xff0c;KafKa能够很好…

HarmonyOS 相对布局(RelativeContainer)

1. HarmonyOS 相对布局&#xff08;RelativeContainer&#xff09; 文档中心:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-layout-development-relative-layout-V5   RelativeContainer为采用相对布局的容器&#xff0c;支持容器内部的子元素设…

海螺 2.27.1 |AI生成视频 AI音乐 语音通话

嗨&#xff01;我是小海螺&#xff0c;你的AI智能伙伴&#xff0c;帮助你学习工作效率加倍&#xff01;我无所不知&#xff0c;又像朋友陪你左右&#xff0c;遇到问题&#xff0c;就问我吧。我所使用的技术&#xff0c;是MiniMax公司自研的万亿参数MoE大模型。我们希望能与用户…

【SpringCloud】Seata微服务事务

Seata微服务事务 分布式事务问题&#xff1a;本地事务分布式事务演示分布式事务问题&#xff1a;示例1 分布式事务理论CAP定理一致性可用性分区容错矛盾 Base理论解决分布式事务的思路 初识SeataSeata的架构部署TC服务微服务集成Seata引入依赖配置TC地址 其他服务 动手实践XA模…

WRB Hidden Gap,WRB隐藏缺口,MetaTrader 免费公式!(指标教程)

WRB Hidden Gap MetaTrader 指标用于检测和标记宽范围的柱体&#xff08;非常长的柱体&#xff09;或宽范围的烛身&#xff08;具有非常长实体的阴阳烛&#xff09;。此指标可以识别WRB中的隐藏跳空&#xff0c;并区分显示已填补和未填补的隐藏跳空&#xff0c;方便用户一眼识别…

Zustand介绍与使用 React状态管理工具

文章目录 前言基本使用编写状态加方法在组件中使用异步方法操作 中间件简化状态获取优化性能 持久化保存 前言 在现代前端开发中&#xff0c;状态管理一直是一个关键的挑战。随着应用规模的扩大&#xff0c;组件间的状态共享变得愈加复杂。为了应对这一需求&#xff0c;开发者…

Java-图书管理系统

我的个人主页 欢迎来到我的Java图书管理系统&#xff0c;接下来让我们一同探索如何书写图书管理系统吧&#xff01; 1管理端和用户端 2建立相关的三个包&#xff08;book、operation、user&#xff09; 3建立程序入口Main类 4程序运行 1.首先图书馆管理系统分为管理员端和…

使用Poste搭建内网邮件服务器

使用Poste搭建内网邮件服务器 Poste.io 也是一个流行的邮件服务器方案&#xff0c;它可以通过 Docker 容器轻松部署&#xff0c;非常适合搭建内部邮件服务器。 本文档将向您展示如何开始使用 Poste.io 邮件服务器。在 5 分钟内&#xff0c;您将拥有一个可发送和接收邮件的邮件…

Springboot 使用EasyExcel导出Excel文件

Springboot 使用EasyExcel导出Excel文件 Excel导出系列目录&#xff1a;引入依赖创建导出模板类创建图片转化器 逻辑处理controllerservice 导出效果遗留问题 Excel导出系列目录&#xff1a; 【Springboot 使用EasyExcel导出Excel文件】 【Springboot 使用POI导出Excel文件】 …

基于Python大数据的王者荣耀战队数据分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

es实现自动补全

目录 自动补全 拼音分词器 安装拼音分词器 第一步&#xff1a;下载zip包&#xff0c;并解压缩 第二步&#xff1a;去docker找到es-plugins数据卷挂载的位置&#xff0c;并进入这个目录 第三步&#xff1a;把拼音分词器的安装包拖到这个目录下 第四步&#xff1a;重启es 第…

使用freemarker实现在线展示文档功能开发,包括数据填充

首先&#xff0c;在这个独属于程序员节日的这一天&#xff0c;祝大家节日快乐【求职的能找到心仪的工作&#xff0c;已经工作的工资翻倍】。 ---------------------------------------------------------------回到正文-----------------------------------------------------…

大数据处理随堂测试

HDFS MapReduce HBase Spark

【Linux驱动开发】设备树节点驱动开发入门

【Linux驱动开发】设备树节点驱动开发入门 文章目录 设备树文件设备树文件驱动开发附录&#xff1a;嵌入式Linux驱动开发基本步骤开发环境驱动文件编译驱动安装驱动自动创建设备节点文件 驱动开发驱动设备号地址映射&#xff0c;虚拟内存和硬件内存地址字符驱动旧字符驱动新字…

Redis 集群 总结

前言 相关系列 《Redis & 目录》&#xff08;持续更新&#xff09;《Redis & 集群 & 源码》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;《Redis & 集群 & 总结》&#xff08;学习总结/最新最准/持续更新&#xff09;《Redis & 集群…

Postman常见问题及解决方(全)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、网络连接问题 如果Postman无法发送请求或接收响应&#xff0c;可以尝试以下操作&#xff1a; 检查网络连接是否正常&#xff0c;包括检查网络设置、代理设置…

接口测试(五)jmeter——get请求

一、get请求——短信验证码&#xff08;示例仅供参考&#xff09; 1. get请求&#xff1a;传参数据直接拼接在地址后面&#xff0c;jmeter不需要设置请求头content-type 注&#xff1a;短信验证码接口&#xff0c;返回结果中不会返回短信验证码&#xff0c;是存在数据库表中&a…

Pyramidal Flow使用指南:快手、北大、北邮,开源可免费商用视频生成模型,快速上手教程

什么是 Pyramidal Flow&#xff1f; Pyramidal Flow 是由快手科技、北京大学和北京邮电大学联合推出的开源视频生成模型&#xff0c;它是完全开源的&#xff0c;发布在 MIT 许可证下&#xff0c;允许商业使用、修改和再分发。该模型能够通过文本描述生成最高10秒、分辨率为128…

EveryoneNobel:为每个人打造诺贝尔奖风格的纪念图片

在这个充满荣誉和成就的时代&#xff0c;EveryoneNobel 项目应运而生&#xff0c;旨在为每个人提供一个生成诺贝尔奖风格纪念图片的机会。通过利用 ComfyUI 进行图像生成&#xff0c;结合 HTML 模板展示文字&#xff0c;不仅提供了一个生成诺贝尔奖图片的流程&#xff0c;而且构…

【Python爬虫实战】Selenium自动化网页操作入门指南

#1024程序员节&#xff5c;征文# &#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、准备工作 &#xff08;一&#xff09;安装 Selenium 库 &#xff0…