从零开始搭建企业管理系统(四):集成 Knife4j

集成 Knife4j

    • 前言
    • Knife4j是什么
    • 集成 Knife4j
      • 引入 pom 依赖
      • 添加基础配置
      • 启动程序测试
      • 完善文档信息
        • 编写配置类
        • 修改 UserController
        • 修改 UserEntity
        • 修改 BaseEntity
      • 文档效果图
        • swagger 界面
        • knife4j 界面

前言

前面一小节我们使用postman来进行接口的调试,如果接口一多,就很不方便进行管理,也不方便调试,所以我们本小节集成一个接口文档组件Knife4j,有疑问可以查看 Knife4j 官网。

Knife4j是什么

Knife4j是一个集Swagger2 和 OpenAPI3 为一体的增强解决方案

Knife4j 是为 Java MVC 框架集成 Swagger 生成 Api 文档的增强解决方案,前身是 swagger-bootstrap-ui,致力于 springfox-swagger 的增强 UI 实现。knife4j 为了契合微服务的架构发展,由于原来 swagger-bootstrap-ui 采用的是后端 Java 代码 + 前端 UI 混合打包的方式,在微服务架构下显的很臃肿,因此项目正式更名为 knife4j,更名后主要专注的方面如下:

  • 后端 Java 代码以及前端 UI 模块进行了分离,在微服务架构下使用更加灵活
  • 提供专注于 Swagger 的增强解决方案,不同于只是单纯增强前端 UI 部分

集成 Knife4j

我们参考 Knife4j 官网的教程进行集成。

因为我们的 Spring Boot 版本是 3.2.0,所以只支持 OpenAPI3 规范

  • Spring Boot 3 只支持OpenAPI3规范
  • Knife4j提供的starter已经引用springdoc-openapi的jar,开发者需注意避免jar包冲突

引入 pom 依赖

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

添加基础配置

引入之后,其余的配置,开发者即可完全参考springdoc-openapi的项目说明,Knife4j只提供了增强部分,如果要启用Knife4j的增强功能,可以在配置文件中进行开启

官网提供的部分配置如下,我们修改一下相关信息:

# springdoc-openapi项目配置
springdoc:swagger-ui:# swagger ui 路径path: /swagger-ui.html# 排序方式 alpha 按字母顺序tags-sorter: alphaoperations-sorter: alphaapi-docs:# 接口文档路径path: /v3/api-docsgroup-configs:- group: 'sys'paths-to-match: '/**'packages-to-scan: com.xm.module.sys
# knife4j的增强配置,不需要增强可以不配
knife4j:enable: truesetting:language: zh_cn

启动程序测试

配置好了之后,我们就可以启动程序,访问我们刚才配置的路径了,这里有三个路径,我们分别用浏览器访问看看。

1、/swagger-ui.html,这是 swagger-ui 的页面,Springdoc本身也是集成了Swagger3

在这里插入图片描述

2、/v3/api-docs,这就是 Springdoc 的接口接口文档,可以导入到 postman 等工具中。

在这里插入图片描述

3、/doc.html,这是 Knife4j 的默认界面,可以理解为是 swagger-ui 的增强版,展示的内容一样,只是展示的 ui 变了。

在这里插入图片描述

完善文档信息

ok,我们上面只是将 Knife4j 引入到我们的项目中了,但是里面的接口信息还都是默认的,可以通过 swagger-ui 界面看到,有一个 user-controller,下面有多个接口,都是默认的名称,这样我们将文档给别人或前端,理解起来会很困难,所以我们在开发中,是要补全这些信息的,完善一份持续维护的接口文档。

所以,最后一步就是使用 OpenAPI3 的规范注解,注释各个 Spring 的 REST 接口。我们先来看看 swagger2 和 openAPI3 的注解差别。

Spwagger2和OpenApi3注解的对应关系

Swagger 2OpenAPI 3注解位置
@Api@Tag(name = “接口类描述”)Controller 类上
@ApiOperation@Operation(summary = “接口方法描述”)Controller 方法上
@ApiImplicitParams@ParametersController 方法上
@ApiImplicitParam@Parameter(description = “参数描述”)Controller 方法上 @Parameters 里
@ApiParam@Parameter(description = “参数描述”)Controller 方法的参数上
@ApiIgnore@Parameter(hidden = true) 或 @Operation(hidden = true) 或 @Hidden-
@ApiModel@SchemaDTO类上
@ApiModelProperty@SchemaDTO属性上
编写配置类

首先添加一个配置类,配置一些项目相关的信息。

@Configuration
public class SpringDocConfig {@Beanpublic OpenAPI openApi() {return new OpenAPI().info(new Info().title("XM-ADMIN系统接口文档").version("1.0").description("一个数据中台项目的接口文档").termsOfService("http://localhost:9527/").contact(new Contact().name("xiaoming").url("https://github.com/shixiaomingya")).license(new License().name("Apache 2.0").url("http://localhost:9527/")));}}
修改 UserController
@Tag(name = "用户管理")
@RestController
@RequestMapping("/sys/user")
public class UserController {@Resourceprivate UserService userService;@GetMapping("/{id}")@Operation(summary = "根据用户ID查询用户")public UserEntity get(@PathVariable Long id) {return userService.get(id);}@GetMapping("/list")@Operation(summary = "查询全部")public List<UserEntity> lists() {return userService.lists();}@GetMapping("/page")@Operation(summary = "分页查询")public Page<UserEntity> page(int page, int size) {return userService.page(PageRequest.of(page - 1, size));}@PostMapping@Operation(summary = "新增用户")public void save(@RequestBody UserEntity user) {userService.save(user);}@PutMapping@Operation(summary = "修改用户")public void update(@RequestBody UserEntity user) {userService.update(user);}@DeleteMapping("/{id}")@Operation(summary = "根据用户ID删除用户")public void delete(@PathVariable Long id) {userService.delete(id);}
}
修改 UserEntity
@Data
@Entity
@Table(name = "sys_user")
@Schema(description = "用户实体")
public class UserEntity extends BaseEntity implements Serializable {/*** Id 表示为表 ID* GenerationType.IDENTITY 使用自增长主键*/@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Schema(description = "用户ID")private Long id;/*** REQUIRED 表示用户必填*/@Schema(description = "用户名称", requiredMode = Schema.RequiredMode.REQUIRED)private String name;@Schema(description = "用户昵称")private String nickname;@Schema(description = "用户年龄")private Integer age;@Schema(description = "用户邮箱")private String email;/*** hidden 表示不在文档中显示该字段*/@Schema(description = "用户密码", requiredMode = Schema.RequiredMode.REQUIRED, hidden = true)private String password;
}
修改 BaseEntity
@Data
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Schema(description = "基础实体")
public class BaseEntity {@CreatedBy@Column(name = "create_user", updatable = false)@Schema(description = "创建用户")private String createUser;@LastModifiedBy@Column(name = "update_user")@Schema(description = "修改用户")private String updateUser;@CreatedDate@Column(name = "create_time", updatable = false)@Schema(description = "创建时间")private Date createTime;@LastModifiedDate@Column(name = "update_time")@Schema(description = "修改时间")private Date updateTime;
}

文档效果图

swagger 界面

在这里插入图片描述
在这里插入图片描述

knife4j 界面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

游戏王的题解

目录 原题&#xff1a; 时间&#xff1a;1s 空间&#xff1a;256M 题目描述 输入格式 输出格式 样例输入 样例输出 题目大意&#xff1a; 主要思路&#xff1a; dp转移&#xff1a; dp初始化&#xff1a; 代码&#xff1a; 原题&#xff1a; 时间&#xff1a;1s …

springboot集成knife4j详细教程

使用原生的swagger作为接口文档&#xff0c;功能不够强大&#xff0c;并且默认的ui比较简陋&#xff0c;不符合大众审美。所以实际开发中推荐使用knife4j对swagger进行增强。knife4j的地址&#xff1a;https://gitee.com/xiaoym/knife4j 基本使用 想要使用knife4j非常简单&…

深入学习Redis:从入门到实战

Redis快速入门 1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启 1.4.Redis桌面客户端1.4.1.R…

【VS Code开发】使用Live Server搭建MENJA小游戏并发布至公网远程访问

文章目录 前言1. 编写MENJA小游戏2. 安装cpolar内网穿透3. 配置MENJA小游戏公网访问地址4. 实现公网访问MENJA小游戏5. 固定MENJA小游戏公网地址 前言 本篇教程&#xff0c;我们将通过VS Code实现远程开发MENJA小游戏&#xff0c;并通过cpolar内网穿透发布到公网&#xff0c;分…

C++ //习题3.8 写出下面各逻辑表达式的值。设a=3,b=4,c=5。

C程序设计 &#xff08;第三版&#xff09; 谭浩强 习题3.8 习题3.8 写出下面各逻辑表达式的值。设a3&#xff0c;b4&#xff0c;c5。 (1) a b > c && b c (2) a || b c && b - c (3) !(a > b) && !c || 1 (4) !(x a) && (y b…

FastAPI之响应状态码

使用FastAPI自定义响应状态码 FastAPI 是一个现代、快速的 web 框架&#xff0c;用于构建API服务&#xff0c;它允许你通过Python 3.6及以上版本进行编程。一个重要的API设计是返回合适的响应状态码&#xff0c;这可以使得客户端理解服务端的处理结果。本教程将向你展示如何在…

推出 Amazon EC2 C7i 实例

亚马逊云科技宣布全面推出由定制的第 4 代英特尔至强可扩展处理器&#xff08;代号为 Sapphire Rapids&#xff09;提供支持的 Amazon Elastic Compute Cloud (Amazon EC2) C7i 实例。这些定制处理器仅在亚马逊云科技上可用&#xff0c;与其他云提供商使用的基于 x86 的同类英特…

Kafka事务是怎么实现的?Kafka事务消息原理详解

目录 一、Kafka事务性消息1.1 介绍Kafka事务性消息1.2 事务性消息的应用场景1.3 Kafka事务性消息的优势 二、Kafka事务性消息的使用2.1 配置Kafka以支持事务性消息生产者配置消费者配置 2.2 生产者&#xff1a;发送事务性消息创建Kafka生产者开始事务发送消息提交或中止事务 2.…

logstash之grok插件自定义规则学习

文章目录 1、前言2、Grok提供的常用Patterns说明及举例2.1 常用的表达式说明 3、使用grok插件进行日志字段处理4、案例1&#xff1a;处理nginx的日志4.1、查看nginx日志格式4.2、对nginx的日志进行过滤处理 5、案例2&#xff1a;处理tomcat的日志5.1、[安装logstash-filter-mul…

外包干了3个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

【MySQL】在 Centos7 环境下安装 MySQL

环境搭建 一、检查环境二、检查系统安装包三、安装 mysql yum 源四、安装 mysql 服务五、启动服务六、登录 mysql七、配置 my.cnf 注意&#xff0c;我们搭建的 mysql 环境是在 Linux 的 Centos7 环境下安装的~ 一、检查环境 注意&#xff0c;我们在安装和卸载中&#xff0c;先…

pytorch 中 drop_last与 nn.Parameter

1. drop_last 在使用深度学习&#xff0c;pytorch 的DataLoader 中&#xff0c; from torch.utils.data import DataLoader# Define your dataset and other necessary configurations # Create DataLoader train_loader DataLoader(dataset, batch_sizebatch_size, drop_la…

vue项目列表跳转详情返回列表页保留搜索条件

需求 列表进入详情后&#xff0c;返回详情的时候保留搜索的条件&#xff0c;第几页进入的返回还在第几页 1.在详情页设置定义一个字段 mounted() {sessionStorage.setItem("msgInfo", true);},2.在获取列表数据的时候在mounted里面判断定义的字段 if (sessionStor…

【EI会议征稿】第二届纯数学、应用数学与计算数学国际学术会议(PACM 2024)

第二届纯数学、应用数学与计算数学国际学术会议&#xff08;PACM 2024&#xff09; 2024 2nd International Cnference on Pure, Applied and Computational Mathematics (PACM 2024) 第二届纯数学、应用数学计算数学国际学术会议 (PACM2024) 将于2024年1月19-21日在中国厦门隆…

报错:AttributeError: ‘DataFrame‘ object has no attribute ‘reshape‘

这个错误通常发生在你试图在 Pandas DataFrame 上直接使用 reshape 方法时。reshape 方法通常与 NumPy 数组相关联&#xff0c;而不是 Pandas DataFrame。 如果你正在使用 Pandas DataFrame 并希望重新塑造它&#xff0c;你应该使用 Pandas 的重塑函数&#xff0c;如 pivot、m…

linux常用命令大全50个Linux常用命令

Linux有许多常用的命令&#xff0c;这些命令可以用来管理文件、运行程序、查看系统状态等。以下是一些常用的Linux命令&#xff1a; pwd&#xff1a;显示当前所在的工作目录的全路径名称。cd&#xff1a;用于更改当前工作目录&#xff0c;例如&#xff0c;若要进入Documents目…

UE5 树叶飘落 学习笔记

一个Plane是由两个三角形构成的&#xff0c;所以World Position Offset&#xff0c;只会从中间这条线折叠 所有材质 这里前几篇博客有说这种逻辑&#xff0c;就是做一个对称的渐变数值 这里用粒子的A值来做树叶折叠的程度&#xff0c;当然你也可以用Dynamic Param 这样就可以让…

Android 11.0 长按按键切换SIM卡默认移动数据

Android 11.0 长按按键切换SIM卡默认移动数据 近来收到客户需求想要通过长按按键实现切换SIM卡默认移动数据的功能&#xff0c;该功能主要通过长按按键发送广播来实现&#xff0c;具体修改参照如下&#xff1a; 首先创建广播&#xff0c;具体修改参照如下&#xff1a; /vend…

麒麟KYLINOS上删除多余有线连接

原文链接&#xff1a;麒麟KYLINOS上删除多余网络有线连接 hello&#xff0c;大家好啊&#xff0c;今天我要给大家介绍的是在麒麟KYLINOS操作系统中&#xff0c;如何删除通过Parallels Desktop虚拟机安装时产生的多余有线连接。在使用Parallels Desktop虚拟机安装麒麟桌面操作系…