0

我有以下路线:

from("quartz2:findAll//myGroup/myTimerName?cron=" + pushProperties.getQuartz())
                //.setBody().constant("{ \"id\": \"FBJDBFJHSDBFJSBDfi\" }")
                .to("mongodb:mongoBean?database=" + mongoDataConfiguration.getDatabase()
                        + "&operation=findAll&collection=" + mongoDataConfiguration.getDataPointCollection())
                .process(exchange -> {
                    exchange.getIn().setBody(objectMapper.writeValueAsString(exchange.getIn().getBody()));
                }).streamCaching()
                .setHeader(Exchange.HTTP_METHOD, constant(pushProperties.getHttpMethod()))
                .setHeader(Exchange.CONTENT_TYPE, constant(MediaType.APPLICATION_JSON_VALUE))                    
                .to(pushProperties.getUrl() + "&throwExceptionOnFailure=false").streamCaching()

如您所见,我使用throwExceptionOnFailure=false

我从配置中获取我的网址。但我们发现如果

pushProperties.getUrl()=localhost:8080/url?action=myaction

并且在以下情况下不起作用

pushProperties.getUrl()=localhost:8080/url

骆驼中是否有通用方法将请求参数添加到 URL?

就像是:

private String buildUrl() {
    String url = pushProperties.getUrl();
    return url + (url.contains("?") ? "&" : "?") + "throwExceptionOnFailure=false";
}

骆驼api里面

4

2 回答 2

1

那是因为在的情况下localhost:8080/url,追加后变成这样

localhost:8080/url&throwExceptionOnFailure=false
这是错误的
应该是
localhost:8080/url?throwExceptionOnFailure=false
在第一种情况下它可以工作,你已经有一个 requestpatam( ?action=myaction) 所以下一个可以用&符号(&)添加

于 2017-11-22T09:00:22.000 回答
0

我认为您必须添加自己的逻辑才能http在运行时将端点组合到组件。这是因为CamelContext它将在路由本身期间处理它。参数throwExceptionOnFailurehttp组件的一个属性。

我不认为通过添加参数.setHeader(Exchange.HTTP_QUERY, constant("throwExceptionOnFailure=false"))应该起作用,因为这些参数将在http组件被处理后被评估,例如进入 URL 目标。请看一下“如何在 to() 中使用动态 URI”

.toD(pushProperties.getUrl() + "&throwExceptionOnFailure=false")

您可以使用简单的表达式编写一个逻辑来根据pushProperties.getUrl().

于 2017-11-22T16:45:51.333 回答