Apache camel 将URI的一部分编码在camel路由中
我是骆驼新手,所以这可能是一个简单的问题来解决 我有一个带有camel组件的springboot应用程序,它与gitlabapi交互 我的问题是需要对驼峰路由中的端点URI进行编码,例如: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
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
我尝试添加带有标题的URIHTTP\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响应头