首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在camel-http4中设置路径变量

如何在camel-http4中设置路径变量
EN

Stack Overflow用户
提问于 2020-06-11 19:21:10
回答 2查看 962关注 0票数 0

我有一个camel-spring-boot项目,在这个项目中,我使用Spring的@ConfigurationProperties从yml文件加载目标url。因为我的目的地是一个HTTP url,所以我使用camel-http4组件。

现在我的URL是https://example.com/students/{ id }/subject/{ name },这意味着我必须将id和name参数作为路径变量(而不是查询参数)进行传递。我的问题是如何传递这些参数?注意:我不能将URL放在DSL或XML中,它必须放在application.yml中。

然而,作为一种解决方案

代码语言:javascript
复制
//in some processor before toD()
headers.put("id", id);
headers.put("name", name);

//in yml
destination: https4://example.com/students/${header.id}/subject/${header.name}

但是当从yml加载这个属性时,Spring尝试将${header.id}作为Spel表达式(并抛出找不到它的错误),正如我所提到的,它是Camel的简单表达式。如果我使用DSL,这个表达式同样适用于toD(),但不适用于yml。

请让我知道,我的方法是否正确?如果是这样的话,我怎么才能摆脱这个问题。提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2020-06-12 03:18:55

如果我没记错的话,由于高速缓存的大小,我们应该注意使用动态路由。

更简洁的解决方案可能是:

YAML文件:

代码语言:javascript
复制
cfg:
  target:
    url: 'https4://example.com'

Java DSL:

代码语言:javascript
复制
Expression dynamicPathExpression = constant("students/")
    .append(header("id"))
    .append(constant("/subject/"))
    .append(header("name"));

from("direct://whatever")
  .setHeader(Exchange.HTTP_PATH, dynamicPathExpression)
  .to("{{cfg.target.url}}");

这对你有帮助吗?

票数 1
EN

Stack Overflow用户

发布于 2020-06-11 19:32:22

我得到了第二个问题的答案,那就是如何区分简单表达式和Spel

代码语言:javascript
复制
destination: https4://example.com/students/$simple{header.id}/subject/$simple{header.name}

$simple{exp}是${exp}的另一种方式

但是我的第一个问题仍然存在,使用path变量调用端点是推荐的方法吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62323241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档