Camel Quarkus中rest转ahc路由报Uri缺失scheme错误如何解决
错误根因
报错的核心原因是Camel AHC组件默认会读取Exchange中携带的原HTTP请求相关Header(比如CamelHttpUri,该Header存储了原请求的相对路径/customer?phone=%2B35677777777),构造目标请求时会错误地用这个相对路径覆盖你配置的目标URL路径,最终因为相对路径没有http/https协议头抛出缺少scheme的异常。
另外你提供的路由代码存在语法问题:endRest();后面多了一个多余的});,编译阶段会报错,记得一并删除。
解决方案
有两种常用的修复方案:
方案一:添加bridgeEndpoint参数(最推荐)
给AHC组件地址添加bridgeEndpoint=true参数,该参数会让AHC组件完全以你配置的URL作为请求目标,忽略Exchange中携带的原HTTP请求的路径、参数相关Header,修改后的toD代码如下:
.toD("ahc:http://localhost:8080/v1/customer?bridgeEndpoint=true")
方案二:手动移除冲突Header
如果你需要保留部分原请求Header,可以在调用AHC之前手动移除会导致路径冲突的Header:
.setHeader(Exchange.HTTP_METHOD, constant("POST")) // 新增以下代码移除冲突Header .removeHeader(Exchange.HTTP_URI) .removeHeader(Exchange.HTTP_PATH) .removeHeader(Exchange.HTTP_QUERY) .toD("ahc:http://localhost:8080/v1/customer")
补充说明
如果你的需求是把原GET请求的query参数转为POST请求的form表单参数,还需要额外添加转换逻辑,把CamelHttpQuery对应的内容转存到请求Body中即可。
内容的提问来源于stack exchange,提问作者mangusbrother
相关产品推荐
相关产品推荐

