Spring Boot3整合Knife4j(4.5.0)

整体概述

Spring Boot 是用于简化 Spring 应用开发的框架,通过自动配置和约定大于配置原则,能让开发者快速搭建和运行 Spring 应用。Knife4j 是基于 Swagger 增强的 API 文档生成工具,可方便展示和调试 API 接口,生成美观易用的 API 文档。以下将详细介绍如何从零开始把 Spring Boot 3.3.0 与 Knife4j 4.5.0 进行整合。

步骤 1:创建 Spring Boot 项目

方式一:使用 Spring Initializr

Spring Initializr 是在线的 Spring Boot 项目生成器,提供图形化界面,便于快速创建项目。

  1. 打开浏览器,访问 Spring Initializr。
  2. 在页面做如下配置:
    • Project:选 Maven Project,Maven 是项目管理和构建工具,可管理项目依赖、编译、打包等操作。
    • Language:选 Java,使用 Java 语言开发。
    • Spring Boot:选 3.3.0,即要使用的 Spring Boot 版本。
    • Group:通常是公司或组织域名倒序,如 com.example,用于唯一标识项目所属组织或团队。
    • Artifact:是项目名称,如 spring - boot - knife4j - demo,是项目在 Maven 仓库的唯一标识符。
    • Dependencies:点击 Add Dependencies 按钮,搜索并添加 Spring Web 依赖,Spring Web 用于开发 Web 应用,包含 Spring MVC 等核心组件。
  3. 配置完成后,点击 Generate 按钮,浏览器会下载项目压缩包。
  4. 解压下载的压缩包,用喜欢的集成开发环境(IDE)打开项目。以 IntelliJ IDEA 为例,打开 IDE,选 File -> Open,再选解压后的项目文件夹。
方式二:使用 IDE 自带的 Spring Initializr

若使用 IntelliJ IDEA,也可通过其自带的 Spring Initializr 创建项目:

  1. 打开 IntelliJ IDEA,选 File -> New -> Project
  2. 在左侧面板选 Spring Initializr,按上述步骤 2 配置。
  3. 点击 Next,选项目存储位置,再点击 Finish 完成项目创建。

步骤 2:添加 Knife4j 依赖

在项目的 pom.xml 文件中添加 Knife4j 依赖。pom.xml 是 Maven 项目配置文件,用于管理项目依赖和构建信息。打开 pom.xml 文件,在 <dependencies> 标签内添加以下代码:

<dependencies><!-- Spring Web 依赖,用于开发 Web 应用 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Knife4j 依赖,用于生成和展示 API 文档 --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.5.0</version></dependency>
</dependencies>

添加依赖后,Maven 会自动从中央仓库下载所需库文件。在 IntelliJ IDEA 中,IDE 会自动检测 pom.xml 文件变化,并提示导入依赖,点击 Import Changes 按钮,等待依赖下载完成。

步骤 3: Knife4j 界面自定义配置

package org.example.test1;import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class Knife4jConfig {@Beanpublic GroupedOpenApi api4() {return GroupedOpenApi.builder().group("all").displayName("所有接口").packagesToScan("org.example.test1")// 自定义全局响应码
//                .addOpenApiCustomizer((this::setCustomStatusCode)).build();}
}

步骤 4:创建实体类

实体类用于表示业务数据,使用 Swagger 注解为实体类和其属性添加描述信息,以便在 API 文档中清晰展示。

@Schema 注解用于为实体类添加描述信息,name 为实体类在文档中的名称,description 为详细描述

 @Schema 注解为属性添加描述信息,description 为属性描述,example 为示例值

import io.swagger.v3.oas.annotations.media.Schema;// @Schema 注解用于为实体类添加描述信息,name 为实体类在文档中的名称,description 为详细描述
@Schema(name = "User", description = "用户实体类")
public class User {// @Schema 注解为属性添加描述信息,description 为属性描述,example 为示例值@Schema(description = "用户 ID", example = "1")private Long id;@Schema(description = "用户名", example = "张三")private String username;@Schema(description = "用户邮箱", example = "666@example.com")private String email;// 构造函数、Getter 和 Setter 方法public User() {}public User(Long id, String username, String email) {this.id = id;this.username = username;this.email = email;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}

步骤 5:创建 Controller

Controller 负责处理客户端请求并返回响应。使用更多 Swagger 注解描述接口的请求参数、响应结果等信息。

// @Tag 用于对 API 接口进行分组和描述,name 为分组名称,description 为分组详细描述

 // @Operation 描述接口的操作信息,summary 为摘要,description 为详细描述

 // @ApiResponses 定义接口的响应状态码和对应的响应信息

import io.swagger.v3.oas.annotations.Operation; // 导入Swagger Operation注解,用于描述API操作
import io.swagger.v3.oas.annotations.Parameter; // 导入Swagger Parameter注解,用于描述API参数
import io.swagger.v3.oas.annotations.media.Content; // 导入Swagger Content注解,用于定义API响应内容类型
import io.swagger.v3.oas.annotations.media.Schema; // 导入Swagger Schema注解,用于定义API响应模式
import io.swagger.v3.oas.annotations.responses.ApiResponse; // 导入Swagger ApiResponse注解,用于定义API响应信息
import io.swagger.v3.oas.annotations.responses.ApiResponses; // 导入Swagger ApiResponses注解,用于定义多个API响应信息
import io.swagger.v3.oas.annotations.tags.Tag; // 导入Swagger Tag注解,用于对API进行分组和描述
import org.springframework.web.bind.annotation.*; // 导入Spring MVC注解,用于处理HTTP请求import java.util.ArrayList; // 导入ArrayList类,用于动态数组操作
import java.util.List; // 导入List接口// @RestController 是 @Controller 和 @ResponseBody 的组合注解,标识该类是RESTful风格的控制器
@RestController
// @RequestMapping 用于映射请求的URL前缀
@RequestMapping("/api/users")
// @Tag 用于对API接口进行分组和描述,name 为分组名称,description 为分组详细描述
@Tag(name = "用户管理接口", description = "提供用户相关的操作接口")
public class UserController {private List<User> users = new ArrayList<>(); // 创建一个List集合用于存储用户数据// @Operation 描述接口的操作信息,summary 为摘要,description 为详细描述@Operation(summary = "获取所有用户", description = "返回所有用户的列表")// @ApiResponses 定义接口的响应状态码和对应的响应信息@ApiResponses(value = {// @ApiResponse 具体描述某个响应状态码的信息,responseCode 为响应状态码,description 为描述,content 为响应内容@ApiResponse(responseCode = "200", description = "成功获取用户列表",content = {@Content(mediaType = "application/json",// @Schema 指定响应内容的数据结构schema = @Schema(implementation = User.class))}})})@GetMappingpublic List<User> getUsers() { // 定义一个GET请求处理方法,返回用户列表return users; // 返回用户列表}@Operation(summary = "根据 ID 获取用户", description = "根据用户 ID 获取单个用户信息")@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "成功获取用户信息",content = {@Content(mediaType = "application/json",schema = @Schema(implementation = User.class))}),@ApiResponse(responseCode = "404", description = "未找到该用户", content = @Content)})// @Parameter 描述接口的请求参数,description 为参数描述,example 为示例值@GetMapping("/{id}")public User getUserById(@Parameter(description = "用户 ID", example = "1") @PathVariable Long id) { // 定义一个GET请求处理方法,根据ID获取用户信息return users.stream() // 将用户列表转换为流.filter(user -> user.getId().equals(id)) // 过滤出ID匹配的用户.findFirst() // 查找第一个匹配的用户.orElse(null); // 如果没有找到,返回null}@Operation(summary = "创建用户", description = "创建一个新的用户")@ApiResponses(value = {@ApiResponse(responseCode = "201", description = "用户创建成功",content = {@Content(mediaType = "application/json",schema = @Schema(implementation = User.class))}})@PostMappingpublic User createUser(@Parameter(description = "用户信息", required = true) @RequestBody User user) { // 定义一个POST请求处理方法,创建新用户users.add(user); // 将新用户添加到列表return user; // 返回创建的用户}@Operation(summary = "获取所有用户2", description = "返回所有用户的列表")@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "成功获取用户列表",content = {@Content(mediaType = "application/json",schema = @Schema(implementation = User.class))}})@GetMappingpublic List<User> getUsers2(@Parameter(name = "X-Token", description = "自定义请求头 token", in = ParameterIn.HEADER) @RequestHeader(required = false) String token) { // 定义一个GET请求处理方法,返回用户列表,支持自定义请求头参数return users; // 返回用户列表}}

步骤 6:启动 Spring Boot 应用

在 IDE 中找到项目的启动类(通常是包含 main 方法且带有 @SpringBootApplication 注解的类),右键点击并选择 Run 启动 Spring Boot 应用。启动成功后,控制台会输出启动信息,表明应用已在默认端口(通常是 8080)启动。

步骤 7:访问 Knife4j 文档页面

打开浏览器,访问以下 URL 查看 Knife4j 生成的 API 文档:http://localhost:8080/doc.html

在Springboot的yml文件中配置Knife4j  

# Knife4j配置
# springdoc-openapi配置
springdoc:# get请求多参数时不需要添加额外的@ParameterObject和@Parameter注解default-flat-param-object: true# 启用swaggerUIswagger-ui:#自定义swagger前端请求路径,输入http:127.0.0.1:8080/swagger-ui.html会自动重定向到swagger页面path: /swagger-ui.htmlenabled: true#    tags-sorter: alpha # 标签的排序方式 alpha:按照子母顺序排序(@ApiSupport注解排序不生效,因此需要设置)#    operations-sorter: alpha # 接口的排序方式 alpha:按照子母顺序排序(@ApiOperationSupport注解排序生效,因此这里不作设置)operations-sorter: order # 设置规则为order,该规则会使用Knife4j的增强排序扩展规则`x-order`# 启用文档,默认开启api-docs:path: /v3/api-docs    #swagger后端请求地址enabled: true
# knife4j相关配置 可以不用改
knife4j:enable: true    #开启knife4j,无需添加@EnableKnife4j注解setting:language: ZH_CN   # 中文:ZH_CN 英文:ENenable-swagger-models: trueenable-dynamic-parameter: falsefooter-custom-content: "<strong>Copyright ©️ 2024 Keyidea. All Rights Reversed</strong>"enable-footer-custom: trueenable-footer: trueenable-document-manage: truedocuments: #文档补充说明- name: MarkDown语法说明locations: classpath:static/markdown/grammar/*group: 01-系统接口 # 此处分组必须使用在Knife4jConfig已存在的分组名group,当存在displayName时,使用displayName名称- name: 补充文档locations: classpath:static/markdown/others/*group: 01-系统接口 # 此处分组必须使用在Knife4jConfig已存在的分组名group,当存在displayName时,使用displayName名称

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

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

相关文章

Java 大视界 -- 区块链赋能 Java 大数据:数据可信与价值流转(84)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

K8S学习之基础二十四:k8s的持久化存储之pv和pvc

K8S的存储之pv和pvc 在 Kubernetes (k8s) 中&#xff0c;持久化存储是通过 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 来实现的。PVC 是用户对存储资源的请求&#xff0c;而 PV 是集群中的实际存储资源。PVC 和 PV 的关系类似于 Pod 和 Node 的关系。 Persisten…

【Hive】Hive安装

Hive 第一章 Hive的基础知识 第二章 Hive安装 第三章 DDL&#xff08;Data Definition Language&#xff09;数据定义 第四章 DML&#xff08;Data Manipulation Language&#xff09;数据操作 第五章 Hive查询 第六章 Hive的基础知识 第七章 Hive函数 第八章 分区表和分桶表 …

关于C/C++语言的初学者在哪刷题,怎么刷题

引言&#xff1a; 这篇博客主要是针对初学者关于怎么在网上刷题&#xff0c;以及在哪里刷题。 1.介绍平台&#xff08;在哪刷题&#xff09;&#xff1a; 1.牛客牛客网https://www.nowcoder.com/ &#xff1a;有许多面试题&#xff0c;也有许多供学习者练习的题 2.洛谷洛谷 …

k8s面试题总结(十四)

什么是Helm&#xff1f; Helm是一个k8s的包管理工具&#xff0c;它简化了应用程序在k8s集群中的部署&#xff0c;管理和维护。类似于rpm包和yum之间的关系。 K8s传统方式&#xff1a;类似于rpm安装包的方式&#xff0c;逐步进行安装&#xff0c;遇到依赖还得解决依赖问题 he…

物理服务器的作用都有哪些?

物理服务器是一种高性能的专用服务器&#xff0c;一般会被运用在大型组织和云计算环境当中&#xff0c;可以为企业和用户提供数据存储和计算资源&#xff0c;帮助企业提高整体的工作效率和快速实现业务目标。 物理服务器有着较高的安全性&#xff0c;企业可以将重要的数据信息备…

01 音视频知识学习(视频)

图像基础概念 ◼像素&#xff1a;像素是一个图片的基本单位&#xff0c;pix是英语单词picture的简写&#xff0c;加上英 语单词“元素element”&#xff0c;就得到了“pixel”&#xff0c;简称px&#xff0c;所以“像素”有“图像元素” 之意。 ◼ 分辨率&#xff1a;是指图像…

有关MyBatis的动态SQL

有关MyBatis动态SQL MyBatis动态SQL是一种根据不同条件灵活拼接SQL语句的技术&#xff0c;基于OGNL表达式实现。动态 SQL 大大减少了编写代码的工作量&#xff0c;更体现了 MyBatis 的灵活性、高度可配置性和可维护性。 1.什么是动态SQL? 动态sql可以在一些需要灵活拼接sql…

react使用拖拽,缩放组件,采用react-rnd解决 -完整版

屏幕录制2025-03-10 10.16.06 以下代码仅提供左侧可视化区域 右侧数据根据你们的存储数据来 大家直接看Rnd标签设置的属性即可&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; /*** 用户拖拽水印的最终位置信息*/ export interface ProductWatermarkValue {wat…

Spring Cloud之远程调用OpenFeign参数传递

目录 OpenFeign参数传递 传递单个参数 传递多个参数 传递对象 传递JSON OpenFeign参数传递 传递单个参数 服务提供方product-service RequestMapping("/product") RestController public class ProductController {Autowiredprivate ProductService productSe…

每日一练之移除链表元素

题目&#xff1a; 画图解析&#xff1a; 方法&#xff1a;双指针 解答代码&#xff08;注&#xff1a;解答代码带解析&#xff09;&#xff1a; //题目给的结构体 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* }…

从零开始的python学习(五)P75+P76+P77+P78+P79+P80

本文章记录观看B站python教程学习笔记和实践感悟&#xff0c;视频链接&#xff1a;【花了2万多买的Python教程全套&#xff0c;现在分享给大家&#xff0c;入门到精通(Python全栈开发教程)】 https://www.bilibili.com/video/BV1wD4y1o7AS/?p6&share_sourcecopy_web&v…

基于SpringBoot实现旅游酒店平台功能八

一、前言介绍&#xff1a; 1.1 项目摘要 随着社会的快速发展和人民生活水平的不断提高&#xff0c;旅游已经成为人们休闲娱乐的重要方式之一。人们越来越注重生活的品质和精神文化的追求&#xff0c;旅游需求呈现出爆发式增长。这种增长不仅体现在旅游人数的增加上&#xff0…

FastAPI 分页模块实现详解

1. 简介 本文详细介绍了一个基于 FastAPI 框架的通用分页处理模块的实现。该模块提供了标准的分页参数处理、数据切片和响应格式化功能&#xff0c;可以轻松地集成到任何 FastAPI 项目中。 2. 代码实现 2.1 导入必要的模块 首先&#xff0c;我们需要导入所需的模块&#xf…

Java 学习记录:基础到进阶之路(一)

今天&#xff0c;让我们深入到 Java 项目构建、基础语法及核心编程概念的领域&#xff0c;一探究竟。 软件安装及环境配置请查看之前更新的博客有着详细的介绍&#xff1a; IDEA软件安装&环境配置&中文插件-CSDN博客 目录 1.Java 项目构建基础 1.项目中的 SRC 目录…

Yashan DB 对象管理

一、什么是数据库对象 数据库对象是数据库里面用来存储和指向数据的各种概念和结构的总称。数据库支持的对象包括&#xff1a; • 表&#xff1a;表是一个逻辑概念&#xff0c;是数据库组织管理数据的基本单位。 • 索引&#xff1a;索引是建立在表上的逻辑对象&#xff0c;索…

deepseek 3FS编译

3FS在ubuntu22.04下的编译&#xff08;记录下编译过程&#xff0c;方便后续使用&#xff09; 环境信息 OS ubuntu 22.04内核版本 6.8.0-52-genericlibfuse 3.16.1rust 1.75.0FoundationDB 7.1.66meson 1.0.0ninja 1.10.1 libfuse编译 以下建议均在root下执行 pip3 install…

python-uiautomator2 安装教程

目录 一、简介 二、支持平台及语言 三、工作原理 四、安装 一、简介 uiautomator2是一个python库&#xff0c;用于Android的UI自动化测试&#xff0c;其底层基于Google uiautomator&#xff0c;Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性&…

无头浏览器与请求签名技术-Cloudflare防护

在实际数据采集实践中&#xff0c;许多目标网站&#xff08;例如 Amazon&#xff09;都会采用 Cloudflare 等防护措施&#xff0c;防止机器人和非正常流量。本文将分享一个故障场景下的排查与改进方案&#xff0c;讲述如何利用无头浏览器、请求签名技术以及爬虫代理 IP来实现数…

Spring Cloud之注册中心之Nacos健康监测和环境隔离

目录 Nacos健康检查 两种健康检查机制 Nacos服务类型实例 Nacos环境隔离 创建namespace 配置namespace Nacos健康检查 两种健康检查机制 Nacos作为注册中⼼, 需要感知服务的健康状态, 才能为服务调⽤⽅提供良好的服务. Nacos 中提供了两种健康检查机制&#xff1a; 客⼾…