Apache Camel 3.6 如何移除目标HTTP端点URL中的Camel HTTP参数
Apache Camel 3.6.x toD()方法HTTP参数异常追加问题修复方案
根因说明
Apache Camel 3.x 版本重构了HTTP组件的参数解析逻辑,和2.x版本默认自动过滤Camel专属客户端配置参数的逻辑不同,3.6.x版本默认会将URI中携带的所有查询参数全部透传到最终发起的HTTP请求中,才会出现配置参数泄露的问题。
可用修复方案
方案1:使用端点DSL拆分配置(推荐)
将客户端配置和请求URI拆分,通过端点DSL单独设置配置参数,避免参数混入URI查询部分:
.toD("http://localhost:9090/hello-world", endpoint -> { endpoint.httpMethod("GET"); endpoint.connectTimeout(7000); endpoint.connectionRequestTimeout(1000); })
方案2:添加参数过滤配置
如果不想修改原有URI的写法,直接在原有URI中追加copyCamelPropertiesToHttpHeaders=false配置即可,该参数会让HTTP组件自动过滤Camel内部配置参数,不追加到最终请求URL:
.toD("http://localhost:9090/hello-world?httpMethod=GET&httpClient.connectTimeout=7000&httpClient.connectionRequestTimeout=1000©CamelPropertiesToHttpHeaders=false")
方案3:全局配置HTTP组件参数
如果所有HTTP请求的超时配置统一,可直接在Camel上下文层面全局配置HTTP组件参数,不需要在每个请求URI中单独配置:
// 初始化Camel上下文时配置 HttpComponent httpComponent = camelContext.getComponent("http", HttpComponent.class); httpComponent.setConnectTimeout(7000); httpComponent.setConnectionRequestTimeout(1000); // 后续业务代码直接写请求地址即可 .toD("http://localhost:9090/hello-world?httpMethod=GET")
内容的提问来源于stack exchange,提问作者Balaganapathy
相关产品推荐
相关产品推荐

