Spring Boot 3与Springfox 3.0集成失败,Swagger UI无法访问求助
Spring Boot 3.x + Springfox 集成失败的问题解决
为啥会出现白标错误?
Springfox 3.0.0完全不兼容Spring Boot 3.x版本,根源有两个:
- Spring Boot 3.x全面切换到Jakarta EE API(包路径为
jakarta.*),但Springfox 3.0.0仍依赖旧的Java EE API(javax.*包),两者类路径冲突,导致Swagger核心组件无法正常初始化。 - Springfox项目已经停止维护,最新版本停留在2020年的3.0.0,官方没有适配Spring Boot 3的计划。
靠谱解决方案:换用Springdoc OpenAPI
Springdoc是Springfox的替代项目,专门适配Spring Boot 3.x,配置更简洁。
1. 替换pom依赖
移除原有的Springfox依赖,添加Springdoc的starter:
<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.2.0</version> <!-- 适配Spring Boot 3.x的稳定版 --> </dependency>
2. 简化配置(可选)
Springdoc默认自动完成配置,不需要编写原有的SpringFoxConfig类。如果需要自定义API分组或规则,可以写个简单的配置类:
import org.springdoc.core.models.GroupedOpenApi; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SpringDocConfig { @Bean public GroupedOpenApi publicApi() { return GroupedOpenApi.builder() .group("public-api") .pathsToMatch("/**") .build(); } }
3. 访问Swagger UI
启动项目后,访问地址:http://localhost:8080/swagger-ui/index.html
(注意和Springfox的路径不同,末尾多了index.html)
备选方案:降级Spring Boot到2.x
如果坚持使用Springfox,只能将Spring Boot版本降级到2.7.x(比如你测试过的2.7.9),并给配置类添加@EnableSwagger2注解:
@Configuration @EnableSwagger2 public class SpringFoxConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build(); } }
访问路径保持http://localhost:8080/swagger-ui/即可正常显示。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

