news 2026/4/21 3:28:23

[已解决] 苍穹外卖:一文搞懂 Swagger/Knife4j 配置,前后端联调效率直接翻倍!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[已解决] 苍穹外卖:一文搞懂 Swagger/Knife4j 配置,前后端联调效率直接翻倍!

😫 深夜痛点:你还在用微信发 JSON 结构吗?

凌晨 1 点,你刚写完“员工添加”接口,正准备关灯睡觉。
滴滴!前端群里弹出消息:“哥,添加员工的字段是 username 还是 userName?返回值的 status 是 Integer 还是 String?发个文档看看呗?”

小王欲哭无泪:手动写 Word 文档太慢,发 Postman 导出的 JSON 对方又嫌乱。 难道每次改个字段,都要手动更新一遍所有沟通渠道吗?

这就是为什么我们需要 Knife4j。它不仅是 Swagger 的“整容版”,更是后端开发的救命稻草。

🛠️ 核心思路:让代码自己“说话”

Knife4j 的核心思想是逻辑与文档一体化。通过扫描特定的包路径和注解,它能自动提取接口的路径、参数、响应结构,并生成一个精美的 UI 界面。

核心技术栈

Swagger:底层核心,负责解析注解。

Knife4j:增强皮肤,提供更友好的界面和搜索、过滤功能。

WebMvcConfiguration:配置类,用于注册 Bean 和静态资源映射。

🚀 快速解决方案:三步搞定联调神器

1. 引入依赖

在 sky-common 或 pom.xml 中引入 Knife4j 的起步依赖。

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

2. 编写配置类(核心)

在 WebMvcConfiguration 中定义 Docket 对象。注意这里我们通常会进行分组配置。

@Configuration@Slf4jpublicclassWebMvcConfigurationextendsWebMvcConfigurationSupport{/** * 通过knife4j生成接口文档 * @return */@BeanpublicDocketdocket(){log.info("准备生成接口文档...");ApiInfoapiInfo=newApiInfoBuilder().title("苍穹外卖项目接口文档").version("2.0").description("苍穹外卖项目接口文档").build();Docketdocket=newDocket(DocumentationType.SWAGGER_2).apiInfo(apiInfo).select()// 指定生成接口需要扫描的包.apis(RequestHandlerSelectors.basePackage("com.sky.controller")).paths(PathSelectors.any()).build();returndocket;}}

3. 设置静态资源映射(避坑关键点!)

注意:很多同学配置完发现 404,就是因为拦截器或静态资源路径没放行。由于 Knife4j 的资源不在标准路径下,必须手动配置。

/** * 设置静态资源映射 * @param registry */protectedvoidaddResourceHandlers(ResourceHandlerRegistryregistry){log.info("开始设置静态资源映射...");registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}

📊 逻辑流程图

接口文档是如何从你的代码变成页面的?看这张图就懂了:

📉 对比信息:原生 Swagger vs Knife4j

💡 底层逻辑分析 & 面试加分项

Q:为什么生产环境要关闭 Swagger/Knife4j?

面试加分回答:安全隐患!接口文档暴露了系统的所有入口,容易被恶意爬取数据或进行暴力破解。

避坑小贴士:建议在配置类上增加@Profile({“dev”, “test”}) 注解,确保文档只在开发和测试环境可见。

Q:Knife4j 2.x 和 3.x 有什么主要区别?

底层解析:2.x 主要基于Springfox (Swagger 2),而 3.x 开始兼容Springdoc (OpenAPI 3)

配置方式:3.x 更加强调yml 配置化,减少了 Java 代码的编写。

🔚 总结与互动

配置好 Knife4j 后,你只需要把 http://localhost:8080/doc.html 扔给前端,剩下的时间就可以优雅地喝咖啡了。

👨‍💻 每日一思:

如果在多模块(微服务)架构下,如何实现一个统一的网关文档入口,聚合所有微服务的接口?

最后,如果你觉得这篇文章让你联调少抓了三根头发,别忘了:
点赞(你的鼓励是我持续输出的动力)
收藏(方便下次联调报错时随时翻阅)
👤关注(带你解锁更多《苍穹外卖》实战姿势)

评论区互动你觉得联调中最让你崩溃的事情是什么?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 3:23:59

网络安全漏洞:从信息泄露到SQL注入

一、信息泄露 信息泄露&#xff08;也称数据泄露&#xff09;&#xff0c;指敏感、保密的信息在未经授权的情况下&#xff0c;被故意或意外地披露、获取或传播。小至个人隐私&#xff0c;大至企业机密、国家情报&#xff0c;均可能成为泄露目标。在网络安全里&#xff0c;信息…

作者头像 李华
网站建设 2026/4/21 3:23:37

系统安全-概述

1.信息系统安全基本概念 1.1什么是信息安全 信息在产生、处理、传输、存储、使用、销毁全生命周期的安全&#xff1b;本质是可信、可控。 包含 4 层次&#xff1a;系统安全、数据安全、内容安全、行为安全。 1.2什么是信息系统安全 信息系统 是指信息产生&#xff64;处理&…

作者头像 李华
网站建设 2026/4/21 3:22:15

Hyperf方案 密钥管理服务(KMS)

先搞懂 KMS 是什么 8 )KMS 密钥管理服务&#xff0c;专门管"加密用的钥匙"问题&#xff1a;你用密钥加密数据&#xff0c;但密钥存哪&#xff1f;存数据库&#xff1f;万一数据库泄露&#xff0c;密钥和数据一起完蛋 …

作者头像 李华
网站建设 2026/4/21 3:07:32

jQuery 遍历 - 后代

jQuery 遍历 - 后代元素 (Descendants) 在 jQuery 中&#xff0c;后代遍历用于从当前选中的元素向下查找其子元素、孙元素等所有后代节点。这是 DOM 操作中最常用的功能之一。 一、核心方法 1. children() - 获取直接子元素 只返回一级子元素&#xff08;直接后代&#xff09;&…

作者头像 李华
网站建设 2026/4/21 3:06:18

SeanLib系列函数库-MyFlash

查看其它库函数说明&#xff0c;请点击此处跳转到SeanLib主页 1. 本篇内容 本篇提供了一个适用于STM32F429的片内Flash操作库&#xff0c;支持读&#xff08;一般不使用&#xff09;、扇区擦除、写&#xff08;按字节形式&#xff09;三个方法&#xff0c;相比于HAL库中的函数…

作者头像 李华