Spring Boot 3集成Swagger遇404错误,请求技术支持
Spring Boot 3 集成 Swagger 出现 404 错误排查与解决
问题情况
本人是Java新手,在Spring Boot 3项目中集成Swagger时遇到404错误,访问地址为http://localhost:8080/be/swagger-ui.html。已添加SwaggerConfig配置类,代码如下:
package com.jsqwerty.be.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("API") .description("Service API") .termsOfServiceUrl("http://springfox.io") .contact(new Contact("springfox", "", "")) .license("Apache License Version 2.0") .licenseUrl("https://github.com/springfox/springfox/blob/master/LICENSE") .version("2.0") .build(); } }
pom.xml核心配置片段:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.0</version> <relativePath/> </parent> <dependencies> <!-- 其他依赖省略 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> </dependencies>
核心问题分析
- 版本兼容冲突:Spring Boot 3基于Jakarta EE规范(包路径
jakarta.*),但你使用的Springfox 3.0.0及以下版本依赖Java EE(包路径javax.*),两者不兼容,这是导致404的根本原因。 - 依赖冗余与版本不一致:同时引入
springfox-swagger2、springfox-boot-starter,且springfox-swagger-ui版本为2.9.2,与其他Springfox版本不匹配,造成依赖混乱。 - 访问路径错误:Springfox 3.x的Swagger UI默认路径是
/swagger-ui/index.html,而非旧版的/swagger-ui.html;若项目未配置server.servlet.context-path=/be,原访问路径也会失效。 - 配置类适配问题:原配置类未明确添加
@EnableSwagger2注解,且Springfox的配置逻辑在Spring Boot 3下无法正常加载Bean。
解决方案
方案一:改用SpringDoc(推荐,完全兼容Spring Boot 3)
SpringDoc是Springfox的替代方案,专门适配Spring Boot 3及Jakarta EE:
- 替换pom.xml依赖:移除所有Springfox相关依赖,添加SpringDoc依赖:
<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.2.0</version> </dependency>
- 删除SwaggerConfig.java:SpringDoc会自动完成基础配置,无需手动编写配置类(如需自定义规则,可参考SpringDoc官方文档)。
- 访问路径:启动项目后,若配置了
server.servlet.context-path=/be,访问http://localhost:8080/be/swagger-ui/index.html;未配置则访问http://localhost:8080/swagger-ui/index.html。
方案二:强行适配Springfox(不推荐,维护成本高)
若坚持使用Springfox,需调整依赖与配置:
- 清理并替换依赖:移除
springfox-swagger2、javax.servlet-api、javaee-api依赖,统一使用Springfox 3.0.0版本:
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>3.0.0</version> </dependency>
- 修改配置类:添加
@EnableSwagger2注解,并指定扫描包(避免无差别扫描):
package com.jsqwerty.be.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("com.jsqwerty.be")) .paths(PathSelectors.any()) .build(); } }
- 访问路径:使用
http://localhost:8080/be/swagger-ui/index.html(注意路径结尾为index.html)。
额外检查点
- 确认
application.properties中是否配置了上下文路径:
server.servlet.context-path=/be
若未配置,需去掉访问路径中的/be。
- 查看项目启动日志,确认Swagger/SpringDoc相关Bean是否成功加载,有无报错信息。
内容的提问来源于stack exchange,提问作者Ankit Vashishta
相关产品推荐
相关产品推荐

