bugfix> java > 投稿

誰もが @ExceptionHandler を使用するための最良/最も簡単な方法を知っていますかラップされた例外の場合?

カスタム org.springframework.core.convert.converter.Converter があります @PathVariable の変換に使用するまた、入力が標準範囲外の場合、カスタムランタイム例外をスローします。

これは ConversionException に包まれてしまいます @ExceptionHandler(ConversionException.class) で処理できるSpring私のコントローラーのアドバイスで。

しかし、私は .getCause() する必要があります instanceof を使用します基になる例外が興味のあるタイプかどうかを判断します。その時点で .sendError() への応答を使用できますしかし、異なる根本的な例外がある場合、私は何をすべきかわかりませんか?

元の例外を再スローすると、「@ ExceptionHandlerメソッドの呼び出しに失敗しました」という厄介なログメッセージが表示され、正しく感じられません。

@ExceptionHandler(MyCustomConversionException.class のようなことをする簡単な方法はありますか )ここで、 MyCustomConversionException ConversionException の原因 で @ControllerAdvice

ありがとう!

回答 1 件
  • ControllerAdviceクラス @ControllerAdvice を作成する  これにより、複数の @ExceptionHandler を作成できます  エントリ。各メソッドは、単一の例外または複数の例外を参照できます。

    例えば:

    @ControllerAdvice
    public class ExceptionController extends ResponseExceptionHanlder {
      @ExceptionHandler(value = { NumberFormatException.class })
      protected ResponseEntity<Object> handleNumberFormatExcpetion(Exception ex, WebRequest request) {
         //TODO: Handle exception
         return handleExceptionInternal(ex, 'error', new HttpHeaders(), HttpStatus.BAD_REQUEST, request);
      }
      @ExceptionHandler(value = { InvalidClassException.class })
      protected ResponseEntity<Object> handleNumberFormatExcpetion(Exception ex, WebRequest request) {
         //TODO: Handle exception
         return handleExceptionInternal(ex, 'error', new HttpHeaders(), HttpStatus.BAD_REQUEST, request);
      }
      @ExceptionHandler(value = { MaxUploadSizeExceededException.class,  SizeLimitExceededException.class })
      protected ResponseEntity<Object> handleNumberFormatExcpetion(Exception ex, WebRequest request) {
         //TODO: Handle exception
         return handleExceptionInternal(ex, 'error', new HttpHeaders(), HttpStatus.BAD_REQUEST, request);
      }
    }
    
    

あなたの答え