我有一个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中。
然而,作为一种解决方案
//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。
请让我知道,我的方法是否正确?如果是这样的话,我怎么才能摆脱这个问题。提前谢谢。
发布于 2020-06-12 03:18:55
如果我没记错的话,由于高速缓存的大小,我们应该注意使用动态路由。
更简洁的解决方案可能是:
YAML文件:
cfg:
target:
url: 'https4://example.com'Java DSL:
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}}");这对你有帮助吗?
发布于 2020-06-11 19:32:22
我得到了第二个问题的答案,那就是如何区分简单表达式和Spel
destination: https4://example.com/students/$simple{header.id}/subject/$simple{header.name}$simple{exp}是${exp}的另一种方式
但是我的第一个问题仍然存在,使用path变量调用端点是推荐的方法吗?
https://stackoverflow.com/questions/62323241
复制相似问题