Spring Framework 6(非Spring Boot)集成OpenAPI遇命名空间冲突求助
解决方案
1. 替换为支持Jakarta命名空间的springdoc版本
springdoc从2.0.0版本开始适配Jakarta EE 9+(完美匹配Spring Framework 6的命名空间要求),必须替换原1.7.0版本的依赖:
<!-- Maven依赖示例,可选用2.x系列最新稳定版,如2.5.0 --> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-ui</artifactId> <version>2.2.0</version> </dependency>
Gradle或其他构建工具同步调整依赖版本,确保引入的springdoc组件完全基于Jakarta命名空间。
2. 手动配置SpringDoc核心组件(非Spring Boot环境)
因为没有Spring Boot的自动配置支持,需手动创建配置类注册核心Bean:
import org.springdoc.core.SpringDocConfigurer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; @Configuration public class SpringDocConfig implements WebMvcConfigurer { // 定义OpenAPI基础文档信息 @Bean public OpenAPI customOpenAPI() { return new OpenAPI() .info(new Info() .title("项目REST API文档") .version("1.0.0") .description("基于Spring Framework 6的REST接口说明")); } // 注册SpringDoc核心配置器 @Bean public SpringDocConfigurer springDocConfigurer() { return new SpringDocConfigurer(); } // 配置Swagger UI静态资源访问规则 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/swagger-ui/**") .addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/"); } }
3. 调整Swagger UI访问路径
springdoc 2.x版本的默认访问路径为 http://localhost:8080/rest/swagger-ui/index.html,或直接访问http://localhost:8080/rest/swagger-ui/会自动跳转至首页。若需自定义路径,可通过SpringDocConfigurer修改:
@Bean public SpringDocConfigurer springDocConfigurer() { return new SpringDocConfigurer() .swaggerUiConfig(config -> config.path("/rest/custom-swagger-path")); }
4. 确保依赖一致性
检查并替换项目中所有Servlet相关依赖为Jakarta版本,比如将javax.servlet-api替换为jakarta.servlet:jakarta.servlet-api:6.0.0及以上,彻底移除javax.*相关的Servlet依赖,避免命名空间冲突。
内容的提问来源于stack exchange,提问作者Akash
相关产品推荐
相关产品推荐

