すべての予期しないエラーに対してグローバル例外ハンドラーを作成することは可能ですか?このようなすべての可能なクラスを作成することは不可能であるため:
public class ExceptionHandler implements ExceptionMapper<JsonMappingException> {...}
私はこのようなものが欲しい:
public class ExceptionHandler implements ExceptionMapper<Exception>
すべての予期しないエラーに対してグローバル例外ハンドラーを作成することは可能ですか?このようなすべての可能なクラスを作成することは不可能であるため:
public class ExceptionHandler implements ExceptionMapper<JsonMappingException> {...}
私はこのようなものが欲しい:
public class ExceptionHandler implements ExceptionMapper<Exception>
受け入れられた回答はすべての例外をキャッチしますが、Resteasyの内部例外処理の妨害など、他の多くの問題を引き起こすことに注意してください。
したがって、このアプローチを採用する場合は、重要なメソッドごとにカスタム例外マッピングも作成する必要があります。
特に、このメソッドは組み込みのCORS処理を壊すため、CORS応答を許可する場合は、CORSカスタム例外マッパーを作成する必要があります。
@Provider
public class DefaultOptionsExceptionHandler implements ExceptionMapper<DefaultOptionsMethodException> {
@Override
public Response toResponse(DefaultOptionsMethodException e) {
return e.getResponse();
}
}
あなたはおそらく次のことをすることができます:
@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
ステータスコードが常に適切であるとは限らないことに注意してください。
それを作る簡単な方法はないようです。正しいExceptionMapperを返すResteasyProviderFactoryを変更する必要があります。ただし、組み込みクラスResteasyProviderFactoryを直接使用するため、カップルクラスを変更する必要があります。