@ControllerAdvice
アプリケーションレベルで例外を定義するためにアノテーションを使用しています。問題は@ControllerAdvice
、REST 用と通常の Web アプリ用の 2 つのクラスがあることです。@ExceptionHandler
両方でforを定義するとException.class
、最初のものだけが考慮されます。両方を分離するにはどうすればよいですか?または、例外をキャッチして、それが発生した場所を特定するにはどうすればよいですか? コントローラー固有の例外ハンドラーを使用する方法はありますか?
2 に答える
0
この問題は、アプリケーションのカスタム例外を作成し、@exception ハンドラーを使用してそれぞれに 1 つの例外ハンドラー メソッドを与えることで解決しました。
また、アスペクトを使用して、すべての例外が任意のカスタム例外に変換されるようにしました。
@Aspect
@Component
public class ExceptionInterceptor {
@AfterThrowing(pointcut = "within(x.y.package..*)", throwing = "t")
public void toRuntimeException(Throwable t)
throws ApplicationException1, ApplicationException2,ApplicationException3 {
if (t instanceof ApplicationException1) {
throw (ApplicationException1) t;
} else if (t instanceof ApplicationException2) {
throw (ApplicationException2) t;
} else
throw (ApplicationException3) t;
}
}
これらは、制御を @controlleradvice に転送します。
于 2013-10-11T19:27:32.677 に答える
-1
1ヶ月ほど放置していたので、古いものかもしれません。ただし、この記事はhttp://www.baeldung.com/2013/01/31/exception-handling-for-rest-with-spring-3-2/に役立つ場合があります。
セクション 3.5 は、おそらくあなたが探しているカスタム例外リゾルバーです。
于 2013-08-22T23:02:02.447 に答える