5

Web サービス呼び出しの完了後に HTTP 応答にヘッダー値を設定できるように、RestEASY インターセプターを作成しました。私のコードは次のようになります...

@Provider
@ServerInterceptor
@Precedence("HEADER_DECORATORS")
public class MyHeaderInterceptor implements
        MessageBodyWriterInterceptor {

    @Override
    public void write(MessageBodyWriterContext context) throws IOException,
            WebApplicationException {

             ....do stuff here....
        }
}

ただし、サービスを呼び出すと、インターセプターは呼び出されません。Web サービスの呼び出しが正常に完了したことを確認できますが、インターセプターのコードはまったく実行されません。これ以外にインターセプターを登録するために必要なことはありますか? 他の場所で宣言する必要がありますか?含める必要がある特別な web.xml パラメータはありますか?

4

2 に答える 2

8

web.xml の resteasy.providers context-param にインターセプターをリストする必要があります。Interceptor クラスにアノテーションを追加するだけでは不十分です。

<context-param>
      <param-name>resteasy.providers</param-name>
      <param-value>org.resteasy.test.ejb.exception.FooExceptionMapper</param-value>
</context-param>
于 2011-03-22T11:31:47.200 に答える
1

Resteasy 2.x に関しては、@Provider と JAX-RS リソース クラス (@Path、@GET、@POST など) の両方について、WEB-INF/lib jar と WEB-INF/classes ディレクトリを自動的にスキャンすることもできます。そしてそれらを登録します:

<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>true</param-value>
</context-param>

または、Resteasy で @Provider クラスをスキャンして登録することもできます。

<context-param>
    <param-name>resteasy.scan.providers</param-name>
    <param-value>true</param-value>
</context-param>

どちらの場合も、インターセプターを web.xml に明示的にリストする必要はありません。

それ以外の場合、context-params 'resteasy.scan' と 'resteasy.scan.providers' の両方が有効になっていない (デフォルトでは無効になっている) 場合は、登録する完全修飾 @Provider クラス名のコンマ区切りリストを指定することができます。 「resteasy.providers」要素内:

<context-param>
    <param-name>resteasy.providers</param-name>
    <param-value>com.test.Interceptor1,com.test.Interceptor2</param-value>
</context-param>

これはドキュメントから取得したものです: http://docs.jboss.org/resteasy/docs/2.3.3.Final/userguide/html_single/index.html#d0e72

于 2016-12-05T16:30:31.747 に答える