当前位置: 首页 > news >正文

Spring Boot整合knife4j实战

本文为个人学习笔记整理,仅供交流参考,非专业教学资料,内容请自行甄别

文章目录

  • 前言
  • 一、Spring Boot整合knife4j
  • 二、前端项目整合@umijs/openapi


前言

  knife4j是一款基于 Swagger 的 API 文档工具,主要用于生成、展示和调试后端 API 文档,提供了更友好的 UI 和交互体验(相比原生 Swagger UI),方便前后端协作时查看接口定义。并且可以配合前端的@umijs/openapi,自动生成前端接口请求代码(包括 TypeScript 类型定义、API 调用函数等),简化前端对接后端接口的流程,避免手动编写重复的请求代码。

一、Spring Boot整合knife4j

  首先需要引入依赖,根据Spring Boot2 和Spring Boot合理选择,我的版本是Spring Boot 2:

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

  然后在配置文件中进行设置:

# 接口文档相关配置(knife4j是基于Swagger的增强工具)
knife4j:enable: true  # 是否启用knife4j功能,true表示启用,会生成API文档并提供UI界面openapi:  # OpenAPI规范相关配置(Swagger/OpenAPI的核心配置)title: 接口文档  # 接口文档的标题,会显示在文档UI的顶部version: 1.0  # 接口文档的版本号,用于标识API的迭代版本group:  # 接口分组配置(支持多组API文档,适用于大型项目分模块管理)default:  # 默认分组名称(可自定义,如"user-api"、"order-api")api-rule: package  # 接口扫描规则:按包路径扫描(指定包下的接口会被纳入当前分组)api-rule-resources:  # 具体的扫描资源路径(配合api-rule使用)- org.ragdollcat.first.controller  # 需要扫描的控制器包路径,该包下的所有接口会被包含到当前分组文档中

  启动项目,访问http://ip:port/doc.html
在这里插入图片描述
主页展示基本信息

在这里插入图片描述

具体的接口,以及对应字段的含义,可以通过注解的方式定义

  下面这几个注解是定义在接口及对应的方法上的。

  • @Api:注释具体的Controller接口的作用。
  • @ApiOperation:接口中方法的作用,以及方法的描述。
  • @ApiResponses:定义返回值的含义,可以有多个@ApiResponse组成。
  • @ApiParam:定义方法参数的含义
@RestController
@RequestMapping("/")
@Api(tags = "心跳检测controller")
public class MainController {/*** 服务健康检查接口* 用于监控系统或第三方服务检测当前服务是否正常运行* 通常被用于K8s、Nacos等服务注册中心的健康探针** @return BaseResponse<String> 统一响应体*         - 成功时返回状态码200和消息"ok"*         - 若服务异常,会被全局异常处理器捕获并返回对应错误信息*/@GetMapping("/health")@ApiOperation(value = "服务健康检查", notes = "检查服务是否正常运行,正常返回'ok'")@ApiResponses({@ApiResponse(code = 0, message  = "服务正常运行"),@ApiResponse(code = 500, message  = "服务内部错误")})public BaseResponse<String> health() {// 实际生产环境中可添加更复杂的检查逻辑// 例如:数据库连接检测、缓存服务连通性等return ResultUtils.success("ok");}
}

  下面这几个注解是定义在实体类或具体字段上的。

  • @ApiModel:实体类的作用
  • @ApiModelProperty:字段的含义
@Data
@ApiModel(description = "系统统一返回类")
public class BaseResponse<T> implements Serializable {@ApiModelProperty(value = "状态码")private int code;@ApiModelProperty(value = "具体数据")private T data;@ApiModelProperty(value = "状态信息")private String message;public BaseResponse(int code, T data, String message) {this.code = code;this.data = data;this.message = message;}public BaseResponse(int code, T data) {this(code, data, "");}public BaseResponse(ErrorCode errorCode) {this(errorCode.getCode(), null, errorCode.getMessage());}
}

二、前端项目整合@umijs/openapi

  如果使用的是npm管理工具,则使用如下命令导入:

npm i --save-dev @umijs/openapi

  导入成功后,在package.json中可以看到对应的依赖:
在这里插入图片描述
  在项目的根目录下创建openapi.config.js文件,@umijs/openapi 只需要后端提供符合 OpenAPI 规范的接口文档(无论是通过 Swagger、knife4j 还是其他工具生成的),就能完成代码生成工作。而knife4j是后端接口文档的增强工具,它本质上还是基于 OpenAPI 规范输出接口文档,因此可以作为 @umijs/openapi 的 “数据源” 之一,但并非唯一选择。

import { generateService } from '@umijs/openapi'//生成接口代码的配置
generateService({requestLibPath: "import request from '@/request'",// 后端提供的标准的 OpenAPI 文档的路径schemaPath: 'http://localhost:9080/api/v2/api-docs',// 生成的请求文件存放的路径serversPath: './src',
})

  定义脚本进行测试
在这里插入图片描述
  运行后,找到生成的对应controller的mainController.ts文件,发现controller中相应方法的前端请求代码已经生成,并且通过export关键字导出,可以在其他模块中引用
在这里插入图片描述
  在App.vue中导入,启动项目查看效果:

<script setup lang="ts">
import { healthUsingGet } from '@/api/mainController.ts'healthUsingGet().then((response) => {console.log(response)
})</script>

在这里插入图片描述

http://www.lryc.cn/news/615849.html

相关文章:

  • Mysql笔记-存储过程与存储函数
  • 【C#补全计划】万类之父中的方法
  • 前端开发的奇技淫巧 --- 持续更新中
  • 【Canvas与戳记】黑底金Z字
  • LwIP的内存管理(1)
  • 如何调节天线结构使得两个模式的相位差为90°?如何实现左旋圆极化或右旋圆极化?
  • 软件编程1-shell命令
  • 【话题讨论】GPT-5 发布全解读:参数升级、长上下文与多领域能力提升
  • SpringAi 通过大模型来实现调用自己的Api
  • 基于VuePress2开发文档自部署及嵌入VUE项目
  • vue如何监听localstorage
  • Vue 3 快速入门 第五章
  • vue2升级vue3:单文件组件概述 及常用api
  • Vue.js设计于实现 - 响应式(三)
  • (LeetCode 面试经典 150 题) 104. 二叉树的最大深度 (深度优先搜索dfs)
  • 深入解析微服务分布式事务的原理与优化实践
  • 双非二本如何找工作?
  • CPP继承
  • 40.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--初始化网关
  • 【递归、搜索与回溯算法】递归算法
  • 【前端基础】14、CSS设置背景(background相关的)
  • Unity中实现自动寻路
  • 串口通信初始化过程是怎样的???
  • 每日五个pyecharts可视化图表-line:从入门到精通 (2)
  • go语言运算符
  • H3C(基于Comware操作系统)与eNSP平台(模拟华为VRP操作系统)的命令差异
  • GPT OSS深度解析:OpenAI时隔6年的开源模型,AI民主化的新里程碑?
  • 【递归、搜索与回溯算法】深度优先搜索
  • python Flask简单图书管理 API
  • 从Redisson源码角度深入理解Redis分布式锁的正确实现