我正在尝试通过遵循RESTeasy documentation建议的内容来指定仅与我的某些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过滤器在每个方法调用之前运行(例如:在GETs和POST之前到/ foo / bar之前),而不仅仅是用@ValidateFoo
注释的那些(似乎是一个bug)对我来说)。如果我从过滤器中删除@Provider
注释,它将不会在任何调用之前运行(如预期的那样)。
我一直在使用WebLogic或Tomcat看到这种行为。我的依赖管理是通过Maven完成的,RESTeasy版本是3.0-beta-3。
任何体验/经历过相同行为的人?我在JBoss forums看到了另一个类似问题的用户,到目前为止没有运气。
更新: 仍然遇到RESTeasy 3.0.1-Final的相同问题。
答案 0 :(得分:8)
我有类似的问题。对我来说,解决方案是添加以下注释配置(到@ValidateFoo):
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(value = RetentionPolicy.RUNTIME)
@NameBinding