一尘不染

通过RESTeasy上的NameBinding将过滤器与特定方法匹配

tomcat

通过遵循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从过滤器中删除了注释,它将不会在任何调用之前运行(如预期的那样)。

我一直在使用WebLogic或Tomcat看到此行为。我的依赖项管理是通过Maven完成的,而RESTeasy版本是3.0-beta-3。

任何人都经历过相同的行为?我在JBoss论坛上看到了另一个有类似问题的用户,到目前为止还没有运气。

更新:RESTeasy 3.0.1-Final仍然遇到相同的问题。


阅读 281

收藏
2020-06-16

共1个答案

一尘不染

我有类似的问题。对我来说,解决方案是将以下注释配置添加到@ValidateFoo:

@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(value = RetentionPolicy.RUNTIME)
@NameBinding
2020-06-16