我是camel的新手,更喜欢使用Spring DSL来定义路由。现在我发现很困惑的一点就是http查询字符串参数被命名并处理为头部信息,但它们实际上不是。这是否是camel中的架构错误?
我是camel的新手,更喜欢使用Spring DSL来定义路由。现在我发现很困惑的一点就是http查询字符串参数被命名并处理为头部信息,但它们实际上不是。这是否是camel中的架构错误?
传入的http请求将作为具有与查询参数相同名称的标题添加到交换中。
以下示例来自骆驼文档:
例如,给定一个客户端请求URL, http://myserver/myserver?orderid=123,交换将包含一个名为orderid的标题,其值为123。
您可以通过设置CamelHttpQuery
标头来为其他HTTP调用设置查询参数。Exchange.HTTP_QUERY
是字符串CamelHttpQuery
的静态常量。
例如:
from("jetty://0.0.0.0:8080/test")
.setHeader(Exchange.HTTP_QUERY, simple("?param1=${header.param1}")
.to("http://external-url/test")
from("direct:mycode")
.toD("https://myurl?param1=${header.param1}");
另一种解决方法是使用 toD 组件(SendDynamicProcessor),并在内部使用 http4 组件调用 URL。
使用 camel-http4 2.X.X。从 Camel 3.X 开始,http4 合并到了 http。
我分享了一种通用且可控制几个方面的方法。
您可以使用几个配置值(标题、正文、GET/POST、查询参数等)调用此路由以调用不同的端点。
<!-- param将是List或Array的String key=value,并对其进行toString以创建格式为key1=value1&key2=value2的查询-->
<route id="httpInvoker">
<from uri="direct:httpInvoker"/>
<setHeader headerName="CamelHttpQuery"><simple>ref:param_bean<simple></setHeader>
<setHeader headerName="CamelHttpUri"><simple>ref:uri_bean<simple></setHeader>
<toD uri="http4:\\some-example.com">
<route>
.setHeader(Exchange.HTTP_QUERY, constant("order=123&detail=short"))
。该文档中没有问号。 - WesternGun