对Camel路线中的某些数据进行小修改的最佳方法是什么?
我正在从Mongo拉入一个BSON文档,需要在http调用中使用它的时间戳,但需要将它从毫秒转换为秒。
我试着设置一个标题。
.setHeader("test").jsonpath("$.startTime")
这样我就可以使用Simple表达式将时间戳添加到URL中。
.toD("https://test.com/api/markets?resolution=60&start_time=${headers.test}")
但是我找不到修改标头值的方法。
我还尝试了一种方法
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
DocumentContext message = JsonPath.parse(exchange.getMessage().getBody());
String time = message.read("$.startTime").toString();
time = "111100000";
// do something with the payload and/or exchange here
//exchange.getIn().setBody("Changed body");
}
})
但是这里的交换并没有被传递出去,我是基于我如何使用一个丰富的EIP,一个聚合策略,返回一个带有我所做的修改的交换。
2条答案
按热度按时间62lalag41#
您可以使用Lambda、处理器或bean修改body、header或属性。使用处理器时,您需要使用
Message.setHeader
方法来修改header的值(至少对于值类型和字符串)。Bean方法默认接收body值,因此如果您想传入header,您需要使用简单的语言指定它。除此之外,您还可以使用表达式语言,如simple或groovy。
eimct9ow2#
在路由中,您可以将报头设置为毫秒值
.setHeader("test").jsonpath("$.startTime")
。然后,在处理器中,您可以检索此值:
然后,将millisecondsValue的值transform为所需值,并在交换中将其设置回:
然后调用
.toD("https://test.com/api/markets?resolution=60&start_time=${header.test}")
,它将使用秒值