10

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 で同じ問題がまだ発生しています。

4

1 に答える 1

8

同様の問題がありました。私にとっての解決策は、次の注釈構成を(@ValidateFooに)追加することでした:

@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(value = RetentionPolicy.RUNTIME)
@NameBinding
于 2013-06-26T12:21:19.847 に答える