在Apache Camel路由中,我想安全地将多个标头组合成HTTP查询字符串。我找到的唯一示例要么使用constant(),这对于构建动态查询字符串没有用处,要么使用simple(),它不提供URL转义。
例如,从HTTP组件文档中获取以下片段:
但是这种方法的主要问题在于它没有进行URL编码。这意味着在header.orderId中包含空格(或任何保留字符)会导致HTTP组件抛出异常,因为查询字符串无效。
所以唯一剩下的方法就是使用JavaScript,但对于像这样的事情来说,它非常冗长,或者编写一个自定义处理器。看起来这应该是内置的东西,所以我在这里询问是否有明显/正常的方法来完成我正在寻找的内容?
例如,从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,但对于像这样的事情来说,它非常冗长,或者编写一个自定义处理器。看起来这应该是内置的东西,所以我在这里询问是否有明显/正常的方法来完成我正在寻找的内容?