私はあなたがこれを行うことができるとは思いませんすぐに使用可能なスプリングを使用してください。あなたはまた、getExceptionHandlerMethod
メソッドの実装を見ることができ
...
ServletInvocableHandlerMethod exceptionHandlerMethod = getExceptionHandlerMethod(handlerMethod, exception);
if (exceptionHandlerMethod == null) {
return null;
}
...
:あなたはこの方法ExceptionHandlerExceptionResolver#doResolveHandlerMethodException
でボンネットの下に見ている場合は、発生した例外を処理する単一方法を探して最初の春にそれを見ることができます。最初に、コントローラー・メソッド内に適切なハンドラーを見つけようとしましたが、何も見つからない場合はコントローラー・アドバイザー内にあります。
した後、それを呼び出すこと:
try {
if (logger.isDebugEnabled()) {
logger.debug("Invoking @ExceptionHandler method: " + exceptionHandlerMethod);
}
exceptionHandlerMethod.invokeAndHandle(webRequest, mavContainer, exception, handlerMethod);
}
catch (Exception invocationEx) {
if (logger.isErrorEnabled()) {
logger.error("Failed to invoke @ExceptionHandler method: " + exceptionHandlerMethod, invocationEx);
}
return null;
}
また、あなたはもあなたの最初のハンドラまたは再スロー元から新しい例外をスローすることはできませんので、春には、オリジナルの例外処理中に発生する可能性のある例外を飲み込むことに注意すべきです例外なので、他の場所にキャッチすることができます(実際は可能ですが、これは無意味です)。
あなたが本当にこれをしたいのであれば、 - 私は唯一の方法は、あなたがExceptionHandlerExceptionResolver
を所有している(多分スプリングスExceptionHandlerExceptionResolver
を拡張)とdoResolveHandlerMethodException
方法を変更書くことだと思いますので、乗算exceptionHandlerMethod
(コントローラ内の1と顧問内の1を探します)、チェーン内で呼び出します。これは難しいかもしれません:)
また、this Jiraのチケットを見ることができます。
希望します。