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

Spring Boot 2.5.4项目里,如何给Swagger 3.0和Knife4j一键加上全局Header参数(附完整代码)

Spring Boot 2.5.4项目中Swagger 3.0与Knife4j全局Header参数配置实战

在前后端分离的开发模式中,API文档的清晰性和调试便捷性直接影响着开发效率。对于需要身份验证的接口,如何在文档中统一展示Header参数(如Token)是一个常见需求。本文将详细介绍在Spring Boot 2.5.4项目中,如何为Swagger 3.0和Knife4j一键配置全局Header参数,避免在每个Controller方法上重复添加注解的繁琐操作。

1. 环境准备与依赖配置

1.1 基础环境要求

确保你的开发环境满足以下条件:

  • JDK 1.8+
  • Spring Boot 2.5.4
  • Maven 3.6+ 或 Gradle 6.8+
  • 已集成Swagger 3.0

1.2 添加Knife4j依赖

在项目的pom.xml文件中添加Knife4j的Starter依赖:

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

同时,确保Swagger 3.0的基本依赖已经存在:

<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency>

1.3 基础YAML配置

application.yml中添加Knife4j的基本配置:

knife4j: enable: true # 开启Knife4j增强功能 production: false # 关闭生产环境屏蔽 springfox: documentation: enabled: true # 启用Swagger文档

2. Swagger全局配置实现

2.1 创建Swagger配置类

在项目中创建一个新的配置类,通常命名为SwaggerConfigSwagger3Config

@Configuration @EnableSwagger2 public class Swagger3Config { // 配置内容将在后续步骤中添加 }

2.2 配置全局Header参数

在配置类中添加globalRequestParameters方法,用于定义全局Header参数:

private List<RequestParameter> getGlobalRequestParameters() { List<RequestParameter> parameters = new ArrayList<>(); parameters.add(new RequestParameterBuilder() .name("Authorization") .description("认证Token") .in(ParameterType.HEADER) .query(q -> q.model(m -> m.scalarModel(ScalarType.STRING))) .required(false) .build()); return parameters; }

2.3 完整配置类示例

以下是完整的Swagger配置类代码:

@Configuration @EnableSwagger2 public class Swagger3Config { @Bean public Docket createRestApi() { return new Docket(DocumentationType.OAS_30) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.your.package")) .paths(PathSelectors.any()) .build() .globalRequestParameters(getGlobalRequestParameters()); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("API接口文档") .description("项目API文档") .version("1.0.0") .build(); } private List<RequestParameter> getGlobalRequestParameters() { List<RequestParameter> parameters = new ArrayList<>(); parameters.add(new RequestParameterBuilder() .name("Authorization") .description("认证Token") .in(ParameterType.HEADER) .query(q -> q.model(m -> m.scalarModel(ScalarType.STRING))) .required(false) .build()); return parameters; } }

3. 高级配置与优化

3.1 多环境配置策略

在实际项目中,我们通常需要根据不同的环境(开发、测试、生产)来启用或禁用Swagger文档。可以通过条件注解实现:

@Configuration @ConditionalOnProperty(name = "swagger.enabled", havingValue = "true") @EnableSwagger2 public class Swagger3Config { // 配置内容 }

然后在各环境的配置文件中设置swagger.enabled的值:

# 开发环境 swagger: enabled: true # 生产环境 swagger: enabled: false

3.2 多Header参数配置

如果需要配置多个全局Header参数,可以扩展getGlobalRequestParameters方法:

private List<RequestParameter> getGlobalRequestParameters() { List<RequestParameter> parameters = new ArrayList<>(); // Token参数 parameters.add(new RequestParameterBuilder() .name("Authorization") .description("认证Token") .in(ParameterType.HEADER) .required(true) .build()); // 语言参数 parameters.add(new RequestParameterBuilder() .name("Accept-Language") .description("语言设置") .in(ParameterType.HEADER) .required(false) .build()); return parameters; }

3.3 响应消息全局配置

除了请求参数,我们还可以配置全局的响应消息:

@Bean public Docket createRestApi() { return new Docket(DocumentationType.OAS_30) // 其他配置 .globalResponses(HttpMethod.GET, getGlobalResponseMessage()) .globalResponses(HttpMethod.POST, getGlobalResponseMessage()); } private List<Response> getGlobalResponseMessage() { List<Response> responseList = new ArrayList<>(); responseList.add(new ResponseBuilder().code("401").description("未授权").build()); responseList.add(new ResponseBuilder().code("403").description("禁止访问").build()); responseList.add(new ResponseBuilder().code("404").description("资源不存在").build()); return responseList; }

4. 验证与调试

4.1 访问Swagger UI

启动项目后,可以通过以下URL访问Swagger原生UI:

http://localhost:8080/swagger-ui/

4.2 访问Knife4j增强UI

Knife4j提供了更强大的UI界面,访问地址为:

http://localhost:8080/doc.html

4.3 验证全局Header参数

在Knife4j的界面中,任意选择一个接口进行测试,应该能在请求参数中看到配置的全局Header参数:

参数名称参数位置是否必填描述
Authorizationheader认证Token

4.4 常见问题排查

如果全局Header参数没有显示,可以检查以下几点:

  1. 确保globalRequestParameters方法被正确调用并添加到Docket配置中
  2. 检查Knife4j的enable配置是否为true
  3. 确认Controller类所在的包路径与RequestHandlerSelectors.basePackage中配置的一致
  4. 检查是否有其他Swagger配置覆盖了当前配置
http://www.jsqmd.com/news/932321/

相关文章:

  • IDEA 2023.3 创建 Spring Boot 项目,如何让 Java 8 和 Spring Boot 3.x 共存?保姆级配置指南
  • 天价域名AI.com背后:数字入口的战略价值与AGI生态未来
  • 告别裸奔:用STM32CubeMX给STM32F407ZGT6快速移植FreeRTOS内核(含串口打印任务状态)
  • KAIST 把文本、SQL、知识图谱、属性图全打通:一句话提问,跨四种知识源一起检索
  • STM32掉电检测PVD的5个常见坑与优化技巧:从电压迟滞到中断优先级设置
  • Lab 3-1
  • Arduino蓝牙控制LED:从硬件连接到APP开发的物联网入门实践
  • LaTeX子图排版避坑指南:为什么你的图总对不齐?从原理到实战
  • 三维立体重构智慧矿产透明化安防监测预警及AI预案
  • 如何快速修复Garry‘s Mod游戏问题:面向玩家的完整解决方案
  • 保姆级教程:在ROS Gazebo中为Livox Mid-360激光雷达更换真实3D模型(附Blender缩放技巧)
  • DIY免焊接Ryobi 18V转12V电源:闲置工具电池的再生利用方案
  • 别让大模型把公司机密带出去!企业 RAG 离线隔离与权限硬控制实战
  • ap_ctrl_none接口 + hls::stream非阻塞设计
  • C++进阶:1. 引用折叠规则
  • 基于姿态传感器与Nintendo LABO的互动木偶发声系统实现
  • 从STM32无缝迁移到普冉PY32F003:以UART中断收发为例,对比HAL库异同
  • AI驱动智能合约开发:ChatGPT+Truffle+Infura+MetaMask全流程实战
  • 民谣网站|基于Springboot的民谣网站管理系统(源码+数据库+文档)
  • KMS智能激活终极指南:告别Windows和Office激活烦恼的完整解决方案
  • AI如何守护加密货币高额交易安全:从异常检测到实时防御
  • Sora 2水印去除技术白皮书(仅限首批内测开发者流通版):基于频域掩码+时序一致性修复的工业级方案
  • AI意识之谜:从整合信息理论到硅基困境与未来路径
  • WebToEpub:三步将网页小说转换为EPUB电子书的终极解决方案
  • 从伯德图斜率到阶跃响应:手把手教你用Matlab分析控制系统,并选择PD、PI还是PID校正
  • 跨可用区高可用云原生集群节点规划中关于 K8s Pod健康检查探针设计部署的架构思考
  • 告别卡顿!用Faster-Whisper在CPU上5分钟搞定中文语音转文字(附Tiny模型下载与转换)
  • 用2针排针自制纽扣电池座:零焊接快速原型供电方案
  • 别再瞎猜了!用 Javassist 给 G1/ZGC 装个“黑匣子”,GC 停顿秒级定位
  • 板级设备树驱动修改实战:从PWM到CAN,释放GPIO的完整指南