0

RESTEasy Spring MVC統合(RestEasy 2.0、Spring 3.0を使用したspringmvc-resteasy)を使用しています。RESTEasy例外マッピングプロバイダーを宣言して、アプリケーション例外をHTTP応答にマッピングしたいと思います。現在、私のアプリケーションは明示的に拡張されておらずjavax.ws.rs.core.Application、理想的には、フレームワークによる例外マッピングプロバイダーの自動スキャンに依存したいと考えています。

これが私の例外マッパーの1つがどのように見えるかです。

@Provider public class MyAppExceptionMapper implements ExceptionMapper<MyAppException> {
    public Response toResponse(MyAppException exception) {
            return Response.status(Response.Status.BAD_REQUEST).build();
    } 
}

そして、私の例外クラスは次のようになります

public class MyAppException extends RuntimeException {
    public MyAppException(String s, Throwable t) {
     super(s,t);
    }
}

アプリケーションがをスローするMyAppExceptionと、HTTP-400応答にマップされません(フレームワークから通常のHTTP-500を取得します)

足りないものはありますか?これがフレームワークにプロバイダーを「登録」しない問題である場合、springmvc-resteasyを使用しているときに例外マッパーを登録するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

2

ソロモン・ダスキスから、この問題に遭遇した他の人々が問題を迅速に解決できるようにするためにここに投稿しているという回答を受け取りました。私が疑ったように、例外マッピングプロバイダーをスキャンするようにRESTEasyを構成するようにSpringを構成する必要がありました。@Component例外マッパーにを追加しました。これ、MyAppExceptionを適切なHTTP応答コード(この場合は500ではなく400)にマッピングするために機能します。ただし、注意点があります。「 java.lang.StackTraceElementには引数なしのデフォルトコンストラクタがない」ため、MyAppExceptionはRESTEasyによってシリアル化されません。私はこの二次的な問題の解決策を探しています。

コンポーネントスキャンを@Providersにカスタマイズするか、@Componentを例外マッパーに追加してコンテキストに追加することができます。@Providersからスキャンする方法は次のとおりです。

<context:component-scan base-package="bean">
    <context:include-filter type="annotation" expression="javax.ws.rs.ext.Provider"/>
</context:component-scan>
于 2011-02-22T21:53:55.907 に答える