我的问题是,我必须通过交换身体价值(在前面的路径中设置的)到.to("rest:get ...")
步骤中。我正在尝试类似下面的代码,但是在重要的步骤中,类变量id
等于null
,即使我在前一个步骤中在自定义处理器中设置了它的值。我还尝试使用simple()
函数,它可以计算到交换体中,但问题是我无法访问.to("rest:get ...")
方法中的exchange,我只能在处理器内部访问它。
如何将交换体值传递到.to("rest:get ...")
步骤中?
public class SomeRoute extends RouteBuilder {
@ConfigProperty(name = "rest.external.host")
String host;
@ConfigProperty(name = "rest.external.endpoint")
String endpoint;
String id;
@Override
public void configure() throws Exception {
restConfiguration().host(host);
from("direct:routeEntry")
.log(LoggingLevel.INFO, log, body().toString())
.setHeader(Exchange.HTTP_METHOD, constant("GET"))
.removeHeader(Exchange.HTTP_PATH)
.removeHeaders("Camel*")
.process(exchange -> {
id = exchange.getIn().getBody().toString();
})
.to("rest:get:" + endpoint + "/" + id)
.convertBodyTo(String.class);
}
}
2条答案
按热度按时间kokeuurv1#
使用dynamic(即“toD”):
mmvthczy2#
更简单地解释为什么id为null:类变量值仅在路由示例化时被读取。
它只被读取一次的原因是端点URI在路由构建期间被构造一次,并且在路由被构建和启动之后,每次执行都使用它。
为了得到你想要的结果,你需要使用一个动态来,就像@TachaDeChoco说的那样。
在dynamic to中,您可以在路由执行期间使用简单语法来构造最终URI。