Bootstrap

我与Swagger-UI的量子纠缠:SpringBoot3.x中的薛定谔404事件——解决`springdoc-openapi:2.8.5`UI界面显示问题

技术栈版本(aka 案发现场信息)

  • SpringBoot:3.4.3(那个说好向下兼容但总搞事情的版本)
  • springdoc-openapi:2.8.5(官方文档:你直接copy代码就行啦~)

案发经过:从入门到弃坑只需5分钟

官方文档

根据Spring官方指南 ,我优雅地粘贴了依赖:

<dependency> 
	<groupId>org.springdoc</groupId> 
	<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> 
	<version>2.8.5</version> 
</dependency>

然后自信满满地访问/swagger-ui.html ——结果收获了一个404大礼包(此处应有《黑人问号.jpg》)
404.png
诡异物证

  • v3/api-docs接口正常得像个模范生
    swagger-api
  • 但UI界面就像被黑洞吞噬了一样
  • 咋?你还“犹抱琵琶半遮面”上了?

玄学调试环节

我灵机一动,既然是找不到资源,那我只要自己知道资源的位置,手动加一个映射不就好了嘛👆🤓
于是让AI生成了这段咒语:

@Configuration  
public class SwaggerConfiguration implements WebMvcConfigurer {    
    @Override  
    public void addResourceHandlers(ResourceHandlerRegistry registry) {  
        registry.addResourceHandler("/swagger-ui/**")  
                .addResourceLocations("classpath:/META-INF/resources/webjars/springdoc-openapi-ui/")  
                .resourceChain(false);  
    }  
}

ok,有了这段代码,Swagger-ui终于露出了“庐山真面目”

魔幻现实展开

秉持“控制变量原则”,我打算看看究竟是不是这个配置类挽救了我的项目,于是:

  1. 删掉配置类 → 重新构建 → 居然还能访问!?
    tom疑惑

  2. 为了代码简洁,我删掉了配置类:git add . git commit -m "又解决一个玄学bug"

  3. 第二天:同样的代码,再次404
    tom疑惑
    仿佛昨晚的顺利只是幻觉

走近科学之缓存三连击

我猜想一定是万恶的缓存从中作祟☝️️🤓!
于是开展实验

第一幕:浏览器缓存的背刺

我在“干净”地状况下

  1. 启动不带手动资源映射的后端
  2. edge浏览器访问、chrome浏览器访问,均404
  3. 添加资源映射,再次启动后端
  4. edge浏览器访问,页面产生
  5. 关闭后端,删去后端的资源映射,重新生成并运行
  6. 打开edge浏览器,页面依然存在

chrome
jerry疑惑

操作步骤预期结果实际结果
清缓存+重启服务404警告薛定谔的Swagger
换浏览器访问必然404难道两浏览器竟共享缓存?!

第二幕:内存缓存的阴谋

执行者-缓存

发现资源来自memory cache后:

  1. 虔诚地重启电脑
  2. 焚香沐浴重新启动服务
  3. 结果…UI竟然还在!?

tom忧郁

最终回:磁盘缓存的绝杀

在经历了24小时贤者时间后:

  • 服务启动 → 浏览器访问 → 熟悉的404归来
  • 此刻终于领悟:原来缓存也会闹脾气,今天过期明天见

血泪总结(打工人速记版)

✅ 终极解决方案:把那个配置类焊死在项目里就完事了
❌ 试图理解框架行为 → 容易陷入哲学思考
💡 缓存系统:当代程序员的新型薛定谔实验装置

(欢迎各位大佬在评论区教我做人,救救这个被(可能是)缓存玩弄的菜狗😭)

;