1

@ControllerAdviceアプリケーションレベルで例外を定義するためにアノテーションを使用しています。問題は@ControllerAdvice、REST 用と通常の Web アプリ用の 2 つのクラスがあることです。@ExceptionHandler両方でforを定義するとException.class、最初のものだけが考慮されます。両方を分離するにはどうすればよいですか?または、例外をキャッチして、それが発生した場所を特定するにはどうすればよいですか? コントローラー固有の例外ハンドラーを使用する方法はありますか?

4

2 に答える 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 に答える