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

SpringBoot3.3集成knif4j-swagger文档方式和使用案例

springboot3 集成 knif4j :

访问地址:

swagger 接口文档默认地址:http://localhost:8080/swagger-ui.html#

Knife4j 接口文档默认地址:http://127.0.0.1:8080/doc.html

Maven:

    <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.4.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>3.3.0</version></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-gateway-spring-boot-starter</artifactId><version>${knife4j-openapi3.version}</version></dependency>

基础微服务配置:


knife4j:# 开启增强配置enable: truebasic:enable: true# Basic认证用户名username: babasic# Basic认证密码password: BaBasic123!@#plm## 开启生产环境屏蔽,一定要先开启knife4j增强才会生效## You do not have permission to access this pageproduction: false

网关配置:

knife4j:gateway:enabled: true# 排序规则(tag/operation排序自4.2.0版本新增)# 取值:alpha-默认排序规则,官方swagger-ui默认实现,order-Knife4j提供的增强排序规则,开发者可扩展x-order,根据数值来自定义排序tags-sorter: orderoperations-sorter: order# 指定服务发现的模式聚合微服务文档strategy: manualroutes:- name: App1服务# 子服务存在其他分组情况,聚合其他分组url: /app1/v3/api-docs# 服务名称(Optional)service-name: baian-cloud-test-app1# 路由前缀context-path: /app1# 排序order: 1- name: App2服务# 子服务存在其他分组情况,聚合其他分组url: /app2/v3/api-docs# 服务名称(Optional)service-name: baian-cloud-test-app2# 路由前缀context-path: /app2# 排序order: 2- name: App3服务# 子服务存在其他分组情况,聚合其他分组url: /app3/v3/api-docs# 服务名称(Optional)service-name: baian-cloud-test-app3# 路由前缀context-path: /app3# 排序order: 3

全局添加自定义头

package com.baian.common.core.config;import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.parameters.HeaderParameter;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import lombok.extern.slf4j.Slf4j;
import org.springdoc.core.customizers.GlobalOpenApiCustomizer;
import org.springdoc.core.customizers.GlobalOperationCustomizer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.web.method.HandlerMethod;import java.util.List;/*** @program: baian-cloud* @description: 为每个接口添加鉴权* @author: <航迹者-694204477@qq.com>* @create: 2024-07-02 10:21**/
@Slf4j
@Configuration
public class Knife4jOperationCustomizer {@Value("${sa-token.token-name:Authorization}")private String securityHeaderName;@Beanpublic GlobalOpenApiCustomizer orderGlobalOpenApiCustomizer() {return openApi -> {// 全局添加鉴权参数if (openApi.getPaths() != null) {HeaderParameter parametersItem = new HeaderParameter();parametersItem.setName(securityHeaderName);parametersItem.setRequired(false);Schema<String> schema = new Schema<>();schema.setType("string");parametersItem.setSchema(schema);openApi.getPaths().forEach((s, pathItem) -> {pathItem.readOperations().forEach(operation -> {// 为所有接口添加请求头operation.addParametersItem(parametersItem);// 为所有接口添加鉴权
//                        operation.addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION));});});}};}
}// https://doc.xiaominfo.com/docs/blog/add-authorization-header

注解:Springfox改用Springdoc后,注解改变:

@Api → @Tag@ApiIgnore → @Parameter(hidden = true) or @Operation(hidden = true) or @Hidden@ApiImplicitParam → @Parameter@ApiImplicitParams → @Parameters@ApiModel → @Schema@ApiModelProperty(hidden = true) → @Schema(accessMode = READ_ONLY)@ApiModelProperty → @Schema@ApiOperation(value = "foo", notes = "bar") → @Operation(summary = "foo", description = "bar")@ApiParam → @Parameter@ApiResponse(code = 404, message = "foo") → @ApiResponse(responseCode = "404", description = "foo")

实用新增注解:

@ParameterObject 

案例

@Tag(name = "用户接口")
@RestController
@RequestMapping("sys/user")
public class SysUserController {@Resourceprivate ISysUserService sysUserService;@Operation(summary = "分页查询")@GetMapping("page")public AjaxResult queryPage(@ParameterObject SysUserPageDTO dto) {PageInfo page = sysUserService.queryPage(dto);return AjaxResult.success(page);}@Operation(summary = "详情")@GetMapping("{id}")public AjaxResult queryInfo(@PathVariable Long id) {SysUserDTO dto = sysUserService.queryById(id);return AjaxResult.success(dto);}@Operation(summary = "新增")@PostMappingpublic AjaxResult save(@RequestBody SysUserDTO dto) {Long id = sysUserService.saveInfo(dto);return AjaxResult.success(id);}
}
@Getter
@Setter
@TableName("user")
@Schema(name = "User", description = "$!{table.comment}")
public class User implements Serializable {private static final long serialVersionUID = 1L;@Schema(description = "主键")@TableId("id")private Long id;@Schema(description = "用户名")@TableField("name")private String name;@Schema(description = "手机号")@TableField("phone")private String phone;@Schema(description = "性别")@TableField("sex")private String sex;@Schema(description = "状态 0:禁用,1:正常")@TableField("status")private Integer status;
}

其他参考:

https://gitee.com/-/ide/project/xiaoym/swagger-bootstrap-ui-demo/edit/master/-/knife4j-spring-boot3-demo/src/main/java/com/github/xiaoymin/boot3/config/SwaggerConfig.java

https://blog.csdn.net/m0_74055560/article/details/134348304

福利配置: 自动转发。

package com.baian.common.core.config;import io.undertow.servlet.spec.HttpServletRequestImpl;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;/*** @program: baian-cloud* @description: resource* @author: <航迹者-694204477@qq.com>* @create: 2024-07-02 08:51**/
@RestController
@Slf4j
public class BaiAnResourceCtl {@GetMapping("/")public void context(HttpServletRequest request, HttpServletResponse response) throws IOException {log.error("=====baian-cloud-common-web-core=======com.baian.common.core.config.BaiAnResourceCtl=================默认根path/====重定向到/doc.html==========");if (request instanceof HttpServletRequestImpl undertow) {String resolvedPath = undertow.getExchange().getResolvedPath();response.sendRedirect(resolvedPath + "/doc.html");return;}response.sendRedirect("/doc.html");}}

相关文章:

SpringBoot3.3集成knif4j-swagger文档方式和使用案例

springboot3 集成 knif4j &#xff1a; 访问地址&#xff1a; swagger 接口文档默认地址&#xff1a;http://localhost:8080/swagger-ui.html# Knife4j 接口文档默认地址&#xff1a;http://127.0.0.1:8080/doc.html Maven: <dependency><groupId>com.github.x…...

老年服务与管理实训室:制定教学模式

随着我国人口老龄化程度的加深,如何为老年人提供优质的养老服务成为社会关注的重点。作为培养老年服务人才的重要阵地,老年服务与管理实训室应制定科学合理的教学模式,满足行业发展需求,培养出高素质的老年服务专业人才。本文针对老年服务与管理实训室的教学模式展开探讨,提出相…...

4、DDD、中台和微服务的关系

DDD、中台和微服务的关系 1 DDD和中台的本质 领域驱动设计&#xff08;DDD&#xff09;和中台在企业架构中有着密切的关系。DDD的本质在于通过对业务领域的深入分析和建模&#xff0c;构建高内聚、低耦合的系统。而中台则是对企业核心业务能力的抽象和封装&#xff0c;以实现…...

【ACM出版,马来西亚-吉隆坡举行】第四届互联网技术与教育信息化国际会议 (ITEI 2024)

作为全球科技创新大趋势的引领者&#xff0c;中国不断营造更加开放的科技创新环境&#xff0c;不断提升学术合作的深度和广度&#xff0c;构建惠及各方的创新共同体。这是对全球化的新贡献&#xff0c;是构建人类命运共同体的新贡献。 第四届互联网技术与教育信息化国际学术会议…...

走进IT的世界

引言 随着高考的结束&#xff0c;对于即将踏入IT&#xff08;信息技术&#xff09;领域的新生而言&#xff0c;这个假期不仅是放松身心的时间&#xff0c;更是提前规划、深化专业知识、为大学生活奠定坚实基础的宝贵机会。以下是一份详尽的高考假期预习与规划指南&#xff0c;…...

Linux 时区文件编译器 zic【man 8 zic】

1. NAME&#xff08;名&#xff09; zic - 时区编译器 2. SYNOPSIS&#xff08;概要&#xff09; zic [-v] [-d directory] [-l localtime] [-p posixrules] [-L leapsecondfilename] [-s] [-y command] [filename ...]3. DESCRIPTION&#xff08;函数描述&#xff09; zic…...

Springboot下使用Redis管道(pipeline)进行批量操作

之前有业务场景需要批量插入数据到Redis中&#xff0c;做的过程中也有一些感悟&#xff0c;因此记录下来&#xff0c;以防忘记。下面的内容会涉及到 分别使用for、管道处理批量操作&#xff0c;比较其所花费时间。 分别使用RedisCallback、SessionCallback进行Redis pipeline …...

Vue技巧大揭秘:自定义指令的力量与应用

引言 自定义指令就像是给予开发者的一把魔法钥匙&#xff0c;它能够打开DOM操作的新世界&#xff0c;按我的理解就是把对DOM操作的逻辑进行封装 全局注册与局部注册 全局注册 定义&#xff1a; 全局注册意味着自定义指令在Vue实例创建之前通过Vue.directive()方法注册&…...

HR人才测评,如何考察想象力?

什么是想象力&#xff1f; 想象力是指&#xff0c;人们通过在已有物质的基础上&#xff0c;通过大脑想象、加工、创造出新事物的能力&#xff0c;举一个非常简单的例子&#xff0c;在提到鸟这种生活的时候&#xff0c;大家会联想到各种各样不同鸟的品种。 在企业招聘中常常应…...

Git命令远程分支的合并和本地分支的同步

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

墨烯的C语言技术栈-C语言基础-003

三.数据类型 1.char // 字符数据型 2.short // 短整型 3.int // 整型 4.long // 长整型 5.long long // 更长的整型 6.float // 单精度浮点数 7.double // 双精度浮点数 为什么写代码? 为了解决生活中的问题 购物,点餐,看电影 为什么有这么多类型呢? 因为说的话都是字符型…...

RpcRrovider分发rpc服务(OnMessage和Closure回调)

目录 1.完善rpcprovider.cc的OnConnection 2.完善rpcprovider.cc的OnMessage 3.完整rpcprovider.h 4.完整rpcprovider.cc 这篇文章主要完成&#xff0c;protobuf实现的数据序列化和反序列化。 1.完善rpcprovider.cc的OnConnection rpc的请求是短连接的&#xff0c;请求一次…...

分解+降维+预测!多重创新!直接写核心!EMD-KPCA-Transformer多变量时间序列光伏功率预测

分解降维预测&#xff01;多重创新&#xff01;直接写核心&#xff01;EMD-KPCA-Transformer多变量时间序列光伏功率预测 目录 分解降维预测&#xff01;多重创新&#xff01;直接写核心&#xff01;EMD-KPCA-Transformer多变量时间序列光伏功率预测效果一览基本介绍程序设计参…...

【Python】MacBook M系列芯片Anaconda下载Pytorch,并开发一个简单的数字识别代码(附带踩坑记录)

文章目录 配置镜像源下载Pytorch验证使用Pytorch进行数字识别 配置镜像源 Anaconda下载完毕之后&#xff0c;有两种方式下载pytorch&#xff0c;一种是用页面可视化的方式去下载&#xff0c;另一种方式就是直接用命令行工具去下载。 但是由于默认的Anaconda走的是外网&#x…...

自定义控件动画篇(四)ObjectAnimator的使用

ObjectAnimator 是 Android 属性动画框架中的一个重要组件&#xff0c;它允许你针对特定属性的值进行动画处理。与 ValueAnimator 相比&#xff0c;ObjectAnimator 更专注于 UI 组件&#xff0c;可以直接作用于视图的属性&#xff0c;如位置、尺寸、透明度等&#xff0c;而无需…...

实现List接口的ArrayList和LinkedList

package study;import java.util.*;public class day01_list {public static void main(String[] args) {// <Integer> 这个尖括号表示的是 Java 的泛型&#xff08;Generics&#xff09;// 泛型是 Java 5 引入的一项特性&#xff0c;它允许你在 类、接口和方法 中使用类…...

下拉选择输入框(基于elment-ui)

最近在需求中&#xff0c;需要有一个下拉选择功能&#xff0c;又得可以输入&#xff0c;在 element-ui 官网找了&#xff0c;发现没有适合的&#xff0c;然后在修炼 cv 大法的我&#xff0c;也在网上看了一下&#xff0c;但是也都感觉不合适&#xff0c;所以就自己写了两个&…...

CPP入门:日期类的构建

目录 1.日期类的成员 2.日期类的成员函数 2.1构造和析构函数 2.2检查日期合法 2.3日期的打印 2.4操作符重载 2.4.1小于号 2.4.2等于号 2.4.3小于等于号 2.4.4大于号 2.4.5大于等于号 2.4.6不等号 2.4.7加等的实现 2.4.8加的实现 2.4.9减去一个天数的减等实现 2.4.10…...

springboot学习,如何用redission实现分布式锁

目录 一、springboot框架介绍二、redission是什么三、什么是分布式锁四、如何用redission实现分布式锁 一、springboot框架介绍 Spring Boot是一个开源的Java框架&#xff0c;由Pivotal团队&#xff08;现为VMware的一部分&#xff09;于2013年推出。它旨在简化Spring应用程序…...

【MySQL】如果表被锁可以尝试看一下事务

今天在MySQL中删除表的时候&#xff0c;发现无法删除&#xff0c;一执行drop&#xff0c;navicat就卡死。 通过 SHOW PROCESSLIST显示被锁了 kill掉被锁的进程后依旧被锁 最后发现是由于存在为执行完的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; kill掉这些事务以…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录&#xff0c;这个目录下存放着许多可执行文件。与其他系统的可执行文件类似&#xff0c;这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中&#xff0c;用…...

拟合问题处理

在机器学习中&#xff0c;核心任务通常围绕模型训练和性能提升展开&#xff0c;但你提到的 “优化训练数据解决过拟合” 和 “提升泛化性能解决欠拟合” 需要结合更准确的概念进行梳理。以下是对机器学习核心任务的系统复习和修正&#xff1a; 一、机器学习的核心任务框架 机…...

Linux入门课的思维导图

耗时两周&#xff0c;终于把慕课网上的Linux的基础入门课实操、总结完了&#xff01; 第一次以Blog的形式做学习记录&#xff0c;过程很有意思&#xff0c;但也很耗时。 课程时长5h&#xff0c;涉及到很多专有名词&#xff0c;要去逐个查找&#xff0c;以前接触过的概念因为时…...

宠物车载安全座椅市场报告:解读行业趋势与投资前景

一、什么是宠物车载安全座椅&#xff1f; 宠物车载安全座椅是一种专为宠物设计的车内固定装置&#xff0c;旨在保障宠物在乘车过程中的安全性与舒适性。它通常由高强度材料制成&#xff0c;具备良好的缓冲性能&#xff0c;并可通过安全带或ISOFIX接口固定于车内。 近年来&…...