通过遵循RESTeasy文档的建议,我试图指定仅与某些API调用关联的预匹配过滤器。这是我的代码:
名称绑定:
@NameBinding public @interface ValidateFoo {}
资源:
@Path("/foo/bar") @Produces(MediaType.APPLICATION_JSON) public class FooBar { @GET @ValidateFoo public Object doStuff() { //do stuff } @POST public Object doAnotherStuff() { //do another stuff } }
过滤:
@ValidateFoo @Provider @PreMatching public class FooValidation implements ContainerRequestFilter { @Override public void filter(ContainerRequestContext reqContext) throws IOException { //validate stuff } }
问题是:FooValidation过滤器在 每个 方法调用之前运行(例如:在对/ foo / bar进行GET和POST之前),而不仅是注释的@ValidateFoo(对我来说似乎是一个错误)。如果我@Provider从过滤器中删除了注释,它将不会在任何调用之前运行(如预期的那样)。
@ValidateFoo
@Provider
我一直在使用WebLogic或Tomcat看到此行为。我的依赖项管理是通过Maven完成的,而RESTeasy版本是3.0-beta-3。
任何人都经历过相同的行为?我在JBoss论坛上看到了另一个有类似问题的用户,到目前为止还没有运气。
更新:RESTeasy 3.0.1-Final仍然遇到相同的问题。
我有类似的问题。对我来说,解决方案是将以下注释配置添加到@ValidateFoo:
@Target({ ElementType.TYPE, ElementType.METHOD }) @Retention(value = RetentionPolicy.RUNTIME) @NameBinding