骆驼如何绕过请求头进入http dsl组件请求?

Camel how to bypass request header from entering to http dsl component request?

我在使用 camel http 请求时遇到以下问题。我想保留 url 查询字符串参数的值,而不将其传递给需要在路由上完成的另一个 http 请求。在向外部 api 请求外部处理数据后需要该值。下面是对问题的澄清:

rest("/api")//We get requests as /camel/api?param1=xyz...
    .get()
        .route()
        .setHeader(Exchange.HTTP_METHOD, constant("GET"))
        .setHeader("Accept-Encoding", constant("gzip"))
        .setHeader("Accept", constant("*/*"))
        .removeHeader(Exchange.HTTP_URI)//Remove this
        //How do I prevent the {header.param1} from being passed to the following http request but still be able to use it after the request on the route?
        .to("https://someapi.org/api/...")
        //To process the result, we need the original {header.param1} value from the request to this /camel/api endpoint

    .endRest();

实现这个的正确方法是什么?

如果您收到的参数仅在当前路由 中需要并且不应传递给任何其他端点,您也可以将它们复制到to Exchange properties and delete the headers

与消息 headers 不同,Camel Exchange 属性不会传播到路由,并且当消息到达当前路线。

.setProperty("param1", header("param1")) // create property from header
.removeHeader("param1") // remove the header

这是一种非常明确和透明的方法,但您必须在需要的地方进行。因此,对于您想明确表达的特殊情况很有用。

另一方面,HeaderFilterStrategy 会阻止将特定的 header(基于模式)发送到您配置它的端点。因此,非常适合一般 header 规则 您想要应用于特定类型的所有端点(例如所有 HTTP 端点)。