web-dev-qa-db-ja.com

複数の種類の例外を処理するSpring @ExceptionHandler

@ExceptionHandlerで複数の種類の例外を処理する方法がわかりません。

これらの例外をプログラムで処理する必要があります。これには、共有参照が必要です。これは、この「例外ex」の参照を介して行われますか?私はそうは思いません、このように例外がキャッチされないので、どうすればそれを行うことができますか?

ハンドラメソッドへの引数としてすべての例外参照を置くことはできません。意味がありません。プログラムで処理することはできません。 「instanceof」を使用したり、他の場所に一般的な「例外」として送信したりできるように、共有参照が必要です

@ExceptionHandler({DescriptionCstOrderException.class, SpecializationCstOrderException.class, NoUploadFileException.class,
                    DeadLineCstOrderException.class, DocumentCstOrderException.class, CommentCstOrderException.class})
public String handleFormException(Exception ex, ActionRequest actionRequest) {
    logger.error(ex.getMessage());
    SessionErrors.add(actionRequest, ex.getClass().getName());  
    return "mainOrderForm";
  }

追加の質問:org.springframework.web.multipart.MaxUploadSizeExceededException、それはハンドラのどのメソッドからもスローされませんか? @ExceptionHandlerは、ハンドラメソッドの1つからスローされた例外のみをキャッチします。

exceptionHandlerメソッドはいくつかの拡張された親コントローラーに配置できますが、defaultAnnotationHandlerMapping...のみを使用する場合は?

どんな助けにも感謝します、私は狂っています、これは非常にイライラします...

25
lisak

@ExceptionHandler値は、例外タイプの配列に設定できます。例外がスローされると、リスト内のいずれかのタイプと一致すると、一致する@ExceptionHandlerでアノテーションが付けられたメソッドが呼び出されます。アノテーション値が設定されていない場合、メソッド引数としてリストされた例外タイプが使用されます。詳細は documentation を参照してください。

22
NimChimpsky

@ExceptionHandler値は、例外タイプの配列に設定できます。

Spring documentation で説明されているように例外配列を使用する実装は、次のようになります。

@ExceptionHandler({
    NotFoundException.class,
    MissingServletRequestParameterException.class
 })
37
Arsal