SpringBoot 系列 14:解放双手!Knife4j 吊打原生 Swagger,全局 Token 一键拿捏 文章目录一、通俗唠嗑Knife4j到底是何方神圣1.1 极致形象类比1.2 彻底抛弃原生Swagger的4个核心理由1.3 本文专治两大开发顽疾二、前置避坑环境适配说明三、第一步引入依赖一键装车3.1 Maven核心依赖四、第二步yml极简配置开关自由五、第三步核心干货全局Token请求头配置5.1 完整版生产级配置类5.2 大白话拆解核心原理5.3 拓展小技巧六、第四步编写测试接口坐等自动生成文档七、启动项目见证全自动文档奇迹7.1 专属访问地址7.2 三大核心效果验证7.3 在线调试体验八、高频报错急救包踩坑人血泪总结坑1项目启动报错、依赖冲突坑2SpringBoot3 访问doc.html 404坑3全局Token配置不生效坑4线上项目文档泄露有安全隐患九、最终总结这波集成到底有多爽十、系列预告各位CRUD搬砖大佬集合‍♂️试问谁的后端开发生涯没被手写接口文档狠狠背刺过bug改完了文档忘了更参数改了三个文档通篇旧逻辑前端对着过期文档疯狂报错反手一个问号甩过来项目交接时空白文档堪比未解之谜新人入职直接原地自闭摆烂老牌Swagger大家都用过主打一个丑、卡、难用、bug多界面复古到像十年前的网页配置繁琐还容易冲突妥妥的“凑活能用”工具。而今天的主角Knife4j直接把Swagger原地升级堪称Swagger的顶配魔改PLUS版就像给毛坯房接口文档精装修成轻奢拎包入住大豪宅本篇不整虚的全程人话、爆笑类比、干货拉满手把手带你在SpringBoot中集成Knife4j代码写完文档自动生成、实时同步顺带搞定企业刚需全局Token请求头配置从此告别每个接口手动加Header的重复搬砖复制直接跑生产级配置新手也能零翻车一、通俗唠嗑Knife4j到底是何方神圣1.1 极致形象类比如果把接口文档工具比作手机原生Swagger 老年机只能接打电话基础展示接口、界面简陋、功能单一、小毛病不断、体验拉胯Knife4j 旗舰智能机兼容老年机所有功能颜值炸裂、功能拉满、丝滑流畅还多了离线文档、全局授权、接口调试、日志查看等超多隐藏buff它不是新框架是基于OpenAPI3(Swagger3)深度优化的增强工具完全兼容Swagger注解老项目迁移零成本直接替换就能起飞1.2 彻底抛弃原生Swagger的4个核心理由颜值降维打击告别老旧UI支持明暗双主题接口分类清晰、排版整洁看着就治愈开发焦虑搬砖效率翻倍支持接口搜索、一键离线下载、参数校验、在线调试直接平替Postman日常调试零侵入不踩坑老项目所有Api、Operation注解全部通用不用改一行业务代码解决世纪痛点原生Swagger配置全局Token又臭又长还容易失效Knife4j极简配置一键全局生效1.3 本文专治两大开发顽疾根治文档不同步代码注解即文档代码改一寸文档同步一尺彻底告别手动维护根治重复写Header全局统一配置Authorization请求头所有接口自动携带Token再也不用逐个接口定义二、前置避坑环境适配说明本次配置通吃全网主流版本杜绝99%的版本冲突报错兼容SpringBoot 2.x / 3.x全系列版本采用Knife4j 4.x 稳定版基于OpenAPI3适配SpringBoot3新特性核心避坑Knife4j已内置封装Swagger3核心依赖千万别手动引Swagger原生包引了必冲突报错 过来人血泪提醒90%的Knife4j报错都是因为多引了原生Swagger依赖只留Knife4j依赖干净又稳三、第一步引入依赖一键装车无需多余折腾直接在pom.xml粘贴以下依赖开箱即用生产环境稳定无忧。3.1 Maven核心依赖!-- Knife4j 高颜值接口文档工具内置Swagger3无需额外引入 --dependencygroupIdcom.github.xiaoymin/groupIdartifactIdknife4j-spring-boot-starter/artifactIdversion4.3.0/version/dependency版本小科普4.x是目前最强稳定版本全面适配OpenAPI3完美兼容SpringBoot3修复了3.x版本的各种小bug无脑冲即可。四、第二步yml极简配置开关自由简单几行配置搞定文档开关、环境适配、功能开启轻量化不冗余。# Knife4j 接口文档全局配置knife4j:# 总开关开启文档功能开发环境必开enable:true# 生产环境开关true线上隐藏文档安全防泄露false本地展示production:false# 个性化功能配置settings:language:zh_CNenableOffline:true人话翻译每一行配置enable: true打开文档大门本地开发直接使用production: false本地开发不隐藏文档项目上线改为true自动关闭文档防止接口信息泄露安全拉满enableOffline: true开启离线文档下载对接前端、项目交接不用手动传文档五、第三步核心干货全局Token请求头配置这是全文最值钱、最实用的部分也是企业开发的刚需配置很多小伙伴写接口每个认证接口都要手动加Token请求头代码冗余又麻烦。下面这份配置类直接实现全局一次配置所有接口自动生效同时美化文档首页信息5.1 完整版生产级配置类importio.swagger.v3.oas.models.OpenAPI;importio.swagger.v3.oas.models.info.Contact;importio.swagger.v3.oas.models.info.Info;importio.swagger.v3.oas.models.info.License;importio.swagger.v3.oas.models.security.SecurityRequirement;importio.swagger.v3.oas.models.security.SecurityScheme;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.http.HttpHeaders;/** * Knife4j 全局文档配置类 * 核心能力1、自定义文档美化信息 2、全局统一配置Token请求头所有接口自动携带认证 */ConfigurationpublicclassKnife4jConfig{BeanpublicOpenAPIcustomOpenAPI(){// 1、自定义文档首页展示信息颜值优化InfoprojectInfonewInfo().title(SpringBoot集成Knife4j接口文档系统).description(基于Knife4j(OpenAPI3)自动生成后端接口文档全局适配JWT-Token认证请求头).version(V1.0.0 正式版).contact(newContact().name(后端开发工程师).email(dev163.com)).license(newLicense().name(Apache 2.0 开源协议));// 2、核心配置全局Authorization Token请求头适配99%前后端分离项目SecuritySchemetokenSchemenewSecurityScheme().name(HttpHeaders.AUTHORIZATION).type(SecurityScheme.Type.HTTP).scheme(bearer).bearerFormat(JWT).in(SecurityScheme.In.HEADER);// 3、全局启用该认证规则所有接口自动适配SecurityRequirementsecurityRequirementnewSecurityRequirement().addList(HttpHeaders.AUTHORIZATION);// 整合所有配置返回returnnewOpenAPI().info(projectInfo).addSecurityItem(securityRequirement).components(newio.swagger.v3.oas.models.Components().addSecuritySchemes(HttpHeaders.AUTHORIZATION,tokenScheme));}}5.2 大白话拆解核心原理不做只会CV的码农原理一次性讲透文档美化自定义标题、版本、作者、描述告别官方默认的空白简陋文档项目辨识度拉满全局Token核心相当于给项目所有接口装了一个「通用认证门禁」不用每个接口单独配置一次配置全员生效适配主流规范默认支持前端通用的Bearer Token格式完美适配JWT登录认证体系5.3 拓展小技巧如果你的项目需要额外全局请求头客户端标识、语言、追踪ID直接仿照上述SecurityScheme写法新增即可灵活扩展、无需改业务代码六、第四步编写测试接口坐等自动生成文档随便写两个测试接口搭配Swagger注解见证「代码写完文档自动成型」的快乐importio.swagger.v3.oas.annotations.Operation;importio.swagger.v3.oas.annotations.tags.Tag;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;/** * Knife4j测试控制器 * 演示接口文档自动生成 全局Token请求头生效效果 */RestControllerRequestMapping(/api/test)Tag(name公共测试接口模块,description用于验证Knife4j文档生成、全局请求头配置效果)publicclassTestController{GetMapping(/hello)Operation(summary公开测试接口,description无需Token认证所有人可直接访问)publicStringhelloKnife4j(){return✅ 恭喜Knife4j接口文档集成成功;}GetMapping(/user/profile)Operation(summary用户信息接口,description需要全局Token请求头认证验证全局配置生效)publicStringgetUserProfile(){return✅ 全局Token请求头配置生效接口认证正常;}}注解通俗作用Tag给接口分组归类文档左侧分类展示结构整整齐齐不杂乱Operation给接口加说明自动同步到文档详情前端一看就懂接口用途七、启动项目见证全自动文档奇迹7.1 专属访问地址启动SpringBoot项目浏览器打开下方地址直接解锁高颜值接口文档http://localhost:8080/doc.html对比原生Swagger繁琐地址Knife4j地址简洁好记、加载速度翻倍7.2 三大核心效果验证文档首页展示我们自定义的项目名称、版本、描述颜值直接吊打原生Swagger左侧自动展示分类接口所有测试接口、注释全自动生成无需手动编辑终极验证文档右上角有【Authorize】授权按钮在此输入一次Token全站所有接口自动携带请求头彻底解放双手7.3 在线调试体验无需打开Postman直接在文档页面调试接口输入Token、发起请求、查看参数、查看响应、查看请求日志一站式搞定日常接口测试八、高频报错急救包踩坑人血泪总结整理全网小伙伴集成Knife4j遇到的高频问题一次性兜底解决零踩坑坑1项目启动报错、依赖冲突罪魁祸首同时引入Swagger原生依赖Knife4j依赖版本打架根治方案删除所有swagger、springfox相关依赖只保留Knife4j依赖纯净无冲突坑2SpringBoot3 访问doc.html 404原因SpringBoot3剔除了部分默认静态资源放行规则需要手动配置解决方案新增web资源配置类放行文档静态资源importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;ConfigurationpublicclassWebResourceConfigimplementsWebMvcConfigurer{OverridepublicvoidaddResourceHandlers(ResourceHandlerRegistryregistry){// 放行Knife4j文档静态资源解决404问题registry.addResourceHandler(/doc.html).addResourceLocations(classpath:/META-INF/resources/);registry.addResourceHandler(/webjars/**).addResourceLocations(classpath:/META-INF/resources/webjars/);}}坑3全局Token配置不生效原因漏写addSecurityItem全局绑定配置认证规则未全局注册方案严格对照上方完整配置类务必绑定SecurityRequirement否则全局Header失效坑4线上项目文档泄露有安全隐患方案生产环境将knife4j.production改为true自动隐藏文档页面杜绝接口信息泄露九、最终总结这波集成到底有多爽搞定SpringBoot Knife4j 全局请求头配置直接解锁搬砖三大爽点告别文档内卷代码即文档实时同步更新再也不用熬夜手写、修改接口文档告别重复代码全局Token一次配置全员接口生效减少大量冗余代码告别沟通内耗前端自主查文档、调接口、下离线文件前后端协同效率直接拉满这是目前企业SpringBoot项目的标准标配方案稳定、简洁、高效、零bug学会直接复用在所有项目十、系列预告下一篇SpringBoot系列15Knife4j多模块接口分组、环境隔离、权限隐藏实战适配大型分布式项目实现开发/测试/生产环境差异化文档展示码字不易点赞收藏关注遇到问题评论区留言