Apache Camel:Rest OpenAPI组件重复追加basePath致404问题
Camel REST OpenAPI组件重复追加basePath导致404的解决办法
问题场景
使用camel-rest-openapi组件调用Petstore OpenAPI接口时,组件会重复拼接basePath,最终请求路径变成petstore3.swagger.io/api/v3/api/v3/pet/findByStatus?status=available,触发HTTP 404错误。尝试过切换Petstore v2/v3规范、在application.properties设置basePath、给组件加查询参数覆盖basePath等方法,均未解决。
可行解决方案
1. 启用skipBasePath参数跳过规范中的basePath
这是最直接的解决方式,强制组件忽略OpenAPI规范里定义的basePath,避免重复追加。
- 在YAML DSL的组件全局配置中添加:
components: rest-openapi: apiSpec: "https://petstore3.swagger.io/api/v3/openapi.json" skipBasePath: true host: "petstore3.swagger.io" scheme: "https"
- 或者在单个endpoint调用时指定该参数:
- from: uri: "direct:callPetstore" steps: - to: uri: "rest-openapi:pet/findByStatus?status=available&skipBasePath=true"
2. 检查并对齐OpenAPI规范与组件的路径配置
- 确认OpenAPI规范的
servers[0].url(v3)或basePath(v2)是否已经包含路径前缀(比如/api/v3)。如果规范里已经有,组件的host配置只需要填域名(petstore3.swagger.io),不要额外加/api/v3,否则会重复拼接。 - 路由中调用的接口路径要使用规范里定义的相对路径(比如
/pet/findByStatus),不要手动加上/api/v3前缀。
3. 清理冲突的全局配置
如果在application.properties中配置过camel.rest.openapi.base-path,要么清空该配置,要么确保它和规范中的basePath不重复,同时结合skipBasePath参数使用,避免双重叠加。
内容的提问来源于stack exchange,提问作者Jake Ceballos
相关产品推荐
相关产品推荐

