不使用Spring Boot,如何为集成Swagger的CDI版Apache Camel添加Swagger UI
纯CDI/Camel环境下Swagger UI落地实现(无Spring Boot依赖)
核心实现完全复用你已经跑通的camel-example-swagger-cdi的嵌入式Jetty容器、Camel Servlet组件能力,不需要加Spring Boot,也不需要拆成两个独立服务,只要把Swagger UI的静态资源挂到现有8080端口上就行,完全不改动你已经调好的/api-doc文档生成逻辑。
第一步:引入匹配版本的Swagger UI静态资源依赖
- 不需要手动下载Swagger UI源码、也不需要额外部署静态文件服务,直接通过WebJar方式拉取打包好的静态资源到项目依赖里,减少部署步骤
- 必须对齐版本:选择和你现有Swagger核心库同大版本的Swagger UI包,比如原示例集成的是Swagger 2.0版本的文档生成能力,就选对应2.x大版本的Swagger UI WebJar,避免出现文档解析格式不兼容的问题
- 核心依赖仅两个:用于静态资源路径定位的webjars核心工具包、用于Swagger UI静态资源的WebJar包,没有传递依赖,不会顺带把Spring相关组件引进来
- 避坑提示:不用把Swagger UI的压缩包手动拷到webapp目录下,用WebJar的方式把静态资源和代码打在同一个Jar包里,和你原来的部署结构完全兼容,不会多出来零散的静态文件
第二步:复用现有Servlet容器托管静态资源
- 原示例本身用嵌入式Jetty提供Web服务,所有逻辑都复用现有端口,不新增独立服务、不引入跨域风险
- 扩展现有路由配置,新增Swagger UI静态资源的路径映射,原有
/api-doc的文档生成路由完全不用改 - 路由配置参考写法,和你原来的RouteBuilder写法风格完全一致:
// 原有Swagger JSON生成路由保持不变 from("servlet:/api-doc") .to("swagger"); // 新增Swagger UI静态资源路由 from("servlet:/swagger-ui/*") .to("webjars:swagger-ui"); - 如果你不想额外引入Camel的webjars组件,也可以直接在现有Jetty容器配置里,把
/webjars/*路径映射到Jetty内置的默认静态资源处理器,直接读取依赖Jar包内的静态文件,逻辑和上面的路由写法完全等价
第三步:配置Swagger UI指向本地文档地址
- 不需要修改Swagger UI静态包内的默认配置文件,直接利用Swagger UI原生支持的查询参数传入本地文档地址即可
- 正式访问入口为:
http://localhost:8080/swagger-ui/index.html?url=/api-doc - 可按需做路径简化:新增一个轻量处理器,拦截裸路径
/swagger-ui的请求,直接302跳转到上面带文档参数的访问地址,省得用户输全路径
落地避坑提示
- 所有资源、文档接口都在同一个端口、同一个上下文路径下,完全不会触发跨域限制,不需要额外配置CORS规则
- 若新增的
/swagger-ui路径和现有业务接口路径冲突,可直接修改静态资源映射路径为任意不冲突的地址(比如/doc-ui/*),整体逻辑不需要调整 - 不要跨大版本选Swagger UI包,比如拿OpenAPI 3.x版本的UI去解析Swagger 2.0格式的JSON,会出现接口列表加载失败的问题
内容的提问来源于stack exchange,提问作者JaAnTr
相关产品推荐
相关产品推荐

