Spring Boot集成JAX-RS与Apache CXF后Swagger UI 404问题求助
确认Spring对JAX-RS资源的扫描有效性
引入Spring后,资源扫描逻辑可能被接管。检查你的JAX-RS端点类是否被Spring正确加载——可以在应用启动日志中搜索端点类名称,确认存在加载记录。如果使用Spring Boot,要保证注册JAXRSServer的配置类带有@Configuration注解,且所在包在Spring的扫描范围内。验证Swagger2Feature的注册是否生效
在注册JAXRSServer的Bean代码中,手动打印Swagger2Feature的配置参数(比如basePath、resourcePackage),确认这些配置和非Spring环境下一致。同时排查是否有Filter或Interceptor拦截了Swagger的请求路径(默认常见路径为/swagger、/swagger-ui),可以在请求链路中添加日志,追踪请求是否到达JAX-RS处理层。检查Swagger UI的访问路径是否冲突
Spring MVC的DispatcherServlet可能和JAX-RS的Servlet路径产生冲突,导致Swagger请求被Spring MVC接管而无法匹配到正确的处理逻辑。查看web.xml或Spring配置中DispatcherServlet的映射路径,如果它映射了/*,而JAX-RS Servlet映射了/api/*,那么Swagger UI的访问路径可能需要调整为/api/swagger-ui(而非原来的根路径下的路径)。核对依赖版本兼容性
Java 8环境下,要确保swagger-jaxrs等Swagger组件版本与Spring版本兼容。部分高版本Swagger组件已不再支持Java 8,或与Spring存在版本冲突。建议尝试降级Swagger相关依赖到适配Java 8的稳定版本(如swagger-core 1.5.x系列),同时确认spring-context、spring-web等依赖版本与Swagger无冲突。验证Docker/Kubernetes环境的路径映射
容器化后可能存在Ingress或Service的路径映射错误。检查K8s的Ingress规则,确认Swagger UI的路径已正确转发到容器内的对应端口和路径;同时核对Docker容器的端口映射配置,确保应用端口已对外暴露,外部请求能正常到达容器内的服务。排查Spring Security的拦截规则
如果引入了Spring Security,默认会拦截所有请求。需要在Security配置类中添加放行规则,允许匿名访问Swagger相关路径,比如/swagger/**、/v2/api-docs、/swagger-ui.html等,避免这些请求被Security拦截导致404。
内容的提问来源于stack exchange,提问作者Jeff Mitchell

