3

在 Apache Camel 路由中,我想获取多个标头并以安全的方式将它们组合成 HTTP 查询字符串。我发现的唯一示例要么使用了对构建动态查询字符串没有用的 constant(),要么使用了不提供 URL 转义的 simple()。

例如,直接从 HTTP 组件的文档中获取以下代码段:

   from("direct:start")
      .setHeader(Exchange.HTTP_QUERY, constant("order=123&detail=short"))
      .to("http://oldhost");

这已经完成了 90%,但是如果您不总是想要订单 id 123 怎么办?我们希望能够在这里替换标题值。因此,下一个合乎逻辑的版本是切换到简单:

   from("direct:start")
    .setHeader(Exchange.HTTP_QUERY, simple("order=${header.orderId}&detail=short"))
    .to("http://oldhost");

但这有一个主要问题是没有被 URL 编码。这意味着 header.orderId 中的空格(或任何保留字符)会导致 HTTP 组件针对无效查询字符串引发异常。

所以剩下的唯一方法是使用 JavaScript,这对于这样的事情来说非常冗长,或者编写一个自定义处理器。看起来这应该是内置的东西,所以我在这里问我是否错过了一种明显/正常的方式来做我在这里寻找的事情?

4

1 回答 1

0

http://camel.465427.n5.nabble.com/URI-Escaping-in-HTTP-and-other-Producers-td4427457.html

于 2011-07-07T04:43:16.483 回答