apache-camel: http 查询字符串参数为 headers?

apache-camel: http query string parameter as headers?

我是 camel 的新手,更喜欢使用 Spring DSL 进行路由定义。现在我发现它令人困惑,http 查询字符串参数被命名和处理为 headers,但它们不是。这是骆驼的架构错误吗?

传入的 http 请求将作为 headers 添加到与查询参数同名的交换中。

以下示例来自 camel 文档

For example, given a client request with the URL, http://myserver/myserver?orderid=123, the exchange will contain a header named orderid with the value 123.

您可以通过 CamelHttpQuery header 的设置为您进行的其他 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")

另一种解决方法是使用 toD 组件 (SendDynamicProcessor) 并使用 http4 组件在内部调用 URL。

使用 camel-http4 2.X.X。 & 来自 Camel 3.X http4 合并到 http.

我正在分享一种您可以概括和控制一些事情的方法。

  1. uri可以动态设置。
  2. 参数可以根据需要动态添加。
  3. 您可以通过此路由调用具有少量配置值(headers、body、GET/POST、查询参数等)的不同端点。

    <!-- param will be List or Array of String key=value and make toString to create query of format 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>
    

你可以使用toD。例如:

from("direct:mycode")
  .toD("https://myurl?param1=${header.param1}");