Spring Boot中swagger-ui.html页面突然无法访问求助
嘿,我来帮你定位这个Swagger UI突然挂掉的问题!你提到新增了一个Wildfly 10的Application Startup类后,哪怕切换回Tomcat运行也无法正常打开/swagger-ui.html,只能看到部分内容,那大概率是这个新增类干扰了Spring Boot的上下文或Swagger的自动配置逻辑,咱们一步步来排查:
检查Startup类的注解与逻辑
看看你写的Startup类是不是用了@Singleton、@Startup这类Java EE容器的注解?哪怕在Tomcat环境下,这些注解可能会打乱Spring Boot的Bean初始化顺序,导致Swagger的核心配置Bean(比如SwaggerUiWebMvcConfiguration)无法正常加载。另外,留意这个类里有没有修改ServletContext的操作(比如设置属性、修改资源映射),这类操作可能会覆盖Swagger默认的路径映射规则。确认Swagger自动配置是否正常生效
检查你的Spring Boot启动类上有没有@EnableAutoConfiguration(exclude = ...)或@SpringBootApplication(exclude = ...),看看是不是无意中把Swagger的自动配置类(比如SpringfoxSwaggerUiAutoConfiguration)给排除了。同时,在应用启动日志里搜索“Swagger”或“springfox”关键字,查看是否有类似“AutoConfiguration excluded”或“Bean not initialized”的日志,确认Swagger的Bean是否正常初始化。排查静态资源映射问题
你提到只能打开部分内容,很可能是Swagger UI的静态资源(JS、CSS、HTML文件)没有被正确映射。Spring Boot默认会映射classpath:/META-INF/resources/下的静态资源,而Swagger UI的资源就存放在这里:- 如果你的Startup类实现了
WebMvcConfigurer并重写了addResourceHandlers方法,一定要确保添加了Swagger的资源映射规则:@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/swagger-ui/**") .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/"); registry.addResourceHandler("/swagger-ui.html") .addResourceLocations("classpath:/META-INF/resources/"); } - 如果你使用的是Spring Boot 2.6及以上版本,还要注意路径匹配策略的问题:Spring Boot 2.6默认使用
pathpattern,但Springfox暂未适配,需要在application.properties中添加配置:spring.mvc.pathmatch.matching-strategy=ant_path_matcher。
- 如果你的Startup类实现了
检查依赖版本冲突
虽然你说没有移除依赖,但新增的Startup类如果引入了Wildfly相关的API依赖,可能会导致Servlet或Spring相关依赖的版本冲突。可以用以下命令排查依赖树:- Maven:
mvn dependency:tree - Gradle:
./gradlew dependencies
重点关注Servlet API、Spring Context等核心依赖的版本是否一致。
- Maven:
临时验证Startup类的影响
最直接的测试方法是把新增的Application Startup类注释掉,然后重启应用。如果Swagger UI恢复正常,那问题肯定出在这个类里,再逐步拆解它的逻辑,定位具体影响的代码块。
内容的提问来源于stack exchange,提问作者sarmahdi

