1

我使用sitebricks在 Google App Engine 上构建 RESTful API。我在GuiceCreator中为所有 /rest/* URL 注册了两个过滤器。如何使用filter("/rest/*)语法但排除一个特定 URL?我希望 /rest/* 下的所有内容都被过滤,除了 /rest/1/foo。

我可以枚举所有实际需要过滤的 URL。但是这样做的明显缺点是,如果我决定添加或删除端点,将很难维护。

new ServletModule() {
    @Override
    protected void configureServlets() {
        filter("/rest/*").through(ObjectifyFilter.class);
        filter("/rest/*").through(SomeOtherFilter.class);
    }
}

我正在寻找一个像

filter("/rest/*").exclude("/rest/1/foo").through(ObjectifyFilter.class).
4

1 回答 1

0

感谢 dhanji,我通过使用filterRegex()而不是filter(). 在我的正则表达式中,我使用了否定的lookbehind assertion。这会过滤除以 ./rest/.*结尾的所有 URL /[0-9]/foo

new ServletModule() {
  @Override
  protected void configureServlets() {
    filter("^/rest/.*(?<!/\\d/foo)$").through(ObjectifyFilter.class);
    filter("^/rest/.*(?<!/\\d/foo)$").through(SomeOtherFilter.class);
  }
}
于 2013-07-17T13:08:00.300 回答