Spring Boot集成Jersey时如何启用SpringDoc OpenAPI?
问题原因与解决方案
核心问题
你遇到的报错根源很明确:org.springdoc.webmvc.api.OpenApiResource是Spring MVC专属组件,不能直接注册到Jersey的ResourceConfig中。Jersey是JAX-RS规范的实现,和Spring MVC属于两套独立的Web框架,对应的SpringDoc适配组件完全不同。
解决步骤
1. 替换SpringDoc依赖
移除原有的Spring MVC版SpringDoc依赖,换成Jersey适配的版本:
<!-- 删除原WebMVC依赖 --> <!-- <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.6.0</version> </dependency> --> <!-- 添加Jersey版SpringDoc依赖 --> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-jersey-api</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-jersey-ui</artifactId> <version>2.6.0</version> </dependency>
版本保持和你原有的2.6.0一致,与Spring Boot 3.3.2完全兼容。
2. 修正Jersey配置类
把配置类中注册的WebMVC版OpenApiResource替换为Jersey专属的实现:
@Configuration public class WsResourceConfig extends ResourceConfig { public WsResourceConfig() { packages("resource.packages"); register(MultiPartFeature.class); // 替换为Jersey版本的OpenApiResource register(org.springdoc.jersey.api.OpenApiResource.class); } }
3. 验证与额外配置
启动项目后,访问http://localhost:8080/swagger-ui/index.html即可正常查看OpenAPI文档。
如果你的项目同时启用了Spring MVC和Jersey(依赖了spring-boot-starter-web),建议通过配置区分两者的请求路径,避免冲突:
spring.jersey.application-path=/api
此配置会让Jersey处理/api前缀的请求,Spring MVC处理其他请求(包括Swagger UI的请求)。
内容的提问来源于stack exchange,提问作者MarekChr
相关产品推荐
相关产品推荐

