5

すべての予期しないエラーに対してグローバル例外ハンドラーを作成することは可能ですか?このようなすべての可能なクラスを作成することは不可能であるため:

public class ExceptionHandler implements ExceptionMapper<JsonMappingException> {...}

私はこのようなものが欲しい:

public class ExceptionHandler implements ExceptionMapper<Exception> 
4

3 に答える 3

11

受け入れられた回答はすべての例外をキャッチしますが、Resteasyの内部例外処理の妨害など、他の多くの問題を引き起こすことに注意してください。

したがって、このアプローチを採用する場合は、重要なメソッドごとにカスタム例外マッピングも作成する必要があります。

特に、このメソッドは組み込みのCORS処理を壊すため、CORS応答を許可する場合は、CORSカスタム例外マッパーを作成する必要があります。

@Provider
public class DefaultOptionsExceptionHandler implements ExceptionMapper<DefaultOptionsMethodException> {

    @Override
    public Response toResponse(DefaultOptionsMethodException e) {
        return e.getResponse(); 
    }
}
于 2014-07-11T08:39:40.370 に答える
6

あなたはおそらく次のことをすることができます:

@Provider
public class GlobalExceptionHandler implements ExceptionMapper<Exception> {
    public Response toResponse(Exception exception) {
        return Response.status(Status.INTERNAL_SERVER_ERROR)
            .entity("An error occured").type(MediaType.TEXT_PLAIN)
            .build();
    }
}

RESTEasy 3.0.6.Finalでテストしたところ、動作しているようです。500 Internal Server Errorステータスコードが常に適切であるとは限らないことに注意してください。

于 2014-07-07T09:47:35.093 に答える
0

それを作る簡単な方法はないようです。正しいExceptionMapperを返すResteasyProviderFactoryを変更する必要があります。ただし、組み込みクラスResteasyProviderFactoryを直接使用するため、カップルクラスを変更する必要があります。

于 2012-12-13T14:46:33.860 に答える