我使用sitebricks在Google App Engine上构建RESTful API。我为GuiceCreator中的所有/ rest / *网址注册了两个过滤器。 如何使用filter("/rest/*)
语法但排除一个特定的网址?我希望/ rest / *下的所有内容都被过滤掉,但/ rest / 1 / foo除外。
我可以枚举所有实际需要过滤的网址。但明显的缺点是,如果我决定添加或删除端点,将很难维护。
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).
答案 0 :(得分:0)
Thanks to dhanji,我使用filterRegex()
代替filter()
修复此问题。在我的正则表达式中,我使用的是negative lookbehind assertion。这会过滤除/rest/.*
以<{1}}结尾的所有/[0-9]/foo
个网址。
new ServletModule() {
@Override
protected void configureServlets() {
filter("^/rest/.*(?<!/\\d/foo)$").through(ObjectifyFilter.class);
filter("^/rest/.*(?<!/\\d/foo)$").through(SomeOtherFilter.class);
}
}