将Camel路由限制为HTTP方法

时间:2016-11-09 19:59:41

标签: java apache-camel

我有像这样的Camel路线定义:

@Component
public class AggregateRouter extends AbstractRouteBuilder {
  @Override
  public void configure() throws Exception {
    super.configure();

    from("{{endpoint.users}}/{id}?matchOnUriPrefix=true")
      .to("bean:routeUtils?method=validateQueryParams"))
      .to("bean:routeUtils?method=loadRouteProperties"))
      .to("{{uri.api.users}}")
      .unmarshal().json(JsonLibrary.Jackson, Map.class)
      .to("bean:routeUtils?method=extractAndAddToProperty"))
      .to("bean:routeUtils?method=prepareAggregateRestCalls"))
      .multicast()
        .stopOnException()
        .to("seda:operation1")
        .to("seda:operation2")
      .end()
      .setBody(simple("${property.result}"))
      .marshal().json(JsonLibrary.Jackson)
      .setHeader(Exchange.HTTP_METHOD, constant("GET"))
      .setHeader(Exchange.CONTENT_TYPE, constant("application/json"));

    from("seda:operation2")
      .toD("{{uri.api.users.operation2}}")
      .unmarshal()
      .json(JsonLibrary.Jackson, List.class)
      .to("bean:userService?method=addOp2"));

    from("seda:operation1")
      .toD("{{uri.api.users.operation1}}")
      .choice()
        .when(AbstractHelper::isOk)
          .unmarshal()
          .json(JsonLibrary.Jackson, List.class)
          .to("bean:userService?method=addOp1"))
        .otherwise()
          .unmarshal()
          .json(JsonLibrary.Jackson, Map.class)
          .to("bean:userService?method=handleRouteSubscriptionException"))
      .end();
  }
}

我希望只有当HTTP请求作为GET请求进入集成层时才能使用此定义。现在的问题是:我还有两个操作PUTDELETE),但我不想对这两个进行“特殊”处理(至少目前为止) )...并且它们的行为为GET,因为此路由定义是“拦截”并处理请求。

我无法使用 Rest DSL (该项目目前喜欢)。我也尝试使用&httpMethodRestrict {{endpoint.users}}/{id}?matchOnUriPrefix=true&httpMethodRestrict=PUT,但它也不起作用。

任何线索?

1 个答案:

答案 0 :(得分:1)

我也认为httpMethodRestrict是要走的路。文档对参数非常模糊...尝试使用它像httpMethodRestrict = GET(读取:限制请求到GET)

另一种可能的解决方案可能是使用标题信息 Exchange.HTTP_METHOD ,例如 .filter(标题(" Exchange.HTTP_METHOD")。isEqualTo(" GET& #34;)) - 只是为了得到这个想法(我没有尝试过)