Apache camel 将URI的一部分编码在camel路由中

Apache camel 将URI的一部分编码在camel路由中,apache-camel,Apache Camel,我是骆驼新手,所以这可能是一个简单的问题来解决 我有一个带有camel组件的springboot应用程序,它与gitlabapi交互 我的问题是需要对驼峰路由中的端点URI进行编码,例如: from("direct:start") .setHeader("PRIVATE-TOKEN",constant("myToken")) .to("https://gitlab.com/api/v4/projects/12345/repository/files/folder%2Ffile%2Eext

我是骆驼新手,所以这可能是一个简单的问题来解决

我有一个带有camel组件的springboot应用程序,它与gitlabapi交互

我的问题是需要对驼峰路由中的端点URI进行编码,例如:

 from("direct:start")
  .setHeader("PRIVATE-TOKEN",constant("myToken"))
 .to("https://gitlab.com/api/v4/projects/12345/repository/files/folder%2Ffile%2Eextension/raw?ref=master")
当路由启动时,消息将发送到

"https://gitlab.com/api/v4/projects/12345/repository/files/folder/file.extension/raw?ref=master"
它返回404,因为参数文件_path必须编码,如中所述(我用GET-from-curl进行了检查:第一个URI返回json,第二个404返回json)

我试图将URI的最后一部分作为
HTTP\u QUERY
传递,但在本例中,它和URI之间有一个“?”,我再次得到404:

https://gitlab.com/api/v4/projects/12345/repository/files/?folder%2Ffile%2Eextension/raw?ref=master
我尝试添加带有标题的URI
HTTP\u URI
:这一次正确地到达了URI,但我得到的是null body,而不是json答案


有什么办法解决这个问题吗?

我看到您已经尝试使用
HTTP\u URI
头。你是怎么定的?试试这个:

 from("direct:start")
     .setHeader("PRIVATE-TOKEN", constant("myToken"))
     .setHeader(Exchange.HTTP_URI, simple("https://gitlab.com/api/v4/projects/12345/repository/files/folder%2Ffile%2Eextension/raw?ref=master"))
     .to("http:dummy");
通过这种方式,您可以在路由执行期间而不是在端点定义中设置URI。根据:

Exchange.HTTP\u URI:要调用的URI。将直接覆盖端点上的现有URI集。此URI是要调用的HTTP服务器的URI。它与驼峰端点URI不同,您可以在驼峰端点URI中配置端点选项,如安全性等。此标头不支持该选项,它只是HTTP服务器的URI

不要忘记依赖关系:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-http</artifactId>
</dependency>
我尝试用headerHTTP_URI添加URI:这一次正确地到达了URI,但是我得到的是null body,而不是json答案

请记住,响应应存储在输出正文中:

Camel将外部服务器的HTTP响应存储在OUT body上。IN消息中的所有头都将复制到OUT消息,因此在路由过程中保留头。此外,Camel还将向OUT消息头添加HTTP响应头


我看到您已经尝试使用
HTTP\u URI
头。你是怎么定的?试试这个:

 from("direct:start")
     .setHeader("PRIVATE-TOKEN", constant("myToken"))
     .setHeader(Exchange.HTTP_URI, simple("https://gitlab.com/api/v4/projects/12345/repository/files/folder%2Ffile%2Eextension/raw?ref=master"))
     .to("http:dummy");
通过这种方式,您可以在路由执行期间而不是在端点定义中设置URI。根据:

Exchange.HTTP\u URI:要调用的URI。将直接覆盖端点上的现有URI集。此URI是要调用的HTTP服务器的URI。它与驼峰端点URI不同,您可以在驼峰端点URI中配置端点选项,如安全性等。此标头不支持该选项,它只是HTTP服务器的URI

不要忘记依赖关系:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-http</artifactId>
</dependency>
我尝试用headerHTTP_URI添加URI:这一次正确地到达了URI,但是我得到的是null body,而不是json答案

请记住,响应应存储在输出正文中:

Camel将外部服务器的HTTP响应存储在OUT body上。IN消息中的所有头都将复制到OUT消息,因此在路由过程中保留头。此外,Camel还将向OUT消息头添加HTTP响应头