17

良い一日!

私は持ってい@Controllerます。そのメソッドのいくつかは同じ例外をスローしますが、この例外を別の方法で処理したいと考えています。

を特定のメソッドにバインドする方法はあり@ExceptionHandlerますか?

4

8 に答える 8

2

メソッドに固有のものを指定することはできないと思いますが、メソッドを特定@ExceptionHandlerの にバインドすることはできます。@ExceptionHandlerException

したがって、ある方法ですべてを処理し、他のすべての例外を別の方法で処理したい場合は、次DataIntegrityViolationExceptionのような方法でそれを達成できるはずです。

@ExceptionHandler(DataIntegrityViolationException.class)
public void handleIntegrityViolation() {
    // do stuff for integrity violation here
}

@ExceptionHandler(Exception.class)
public void handleEverythingElse() {
    // do stuff for everything else here
}
于 2013-07-09T01:41:17.197 に答える
1

処理方法に応じて、他のメソッドによってスローされた一般的な例外からサブ例外を派生させることができます。

親例外を として宣言したとしますParentException。などChildAException extends ParentExceptionのサブクラスを派生させます。ChildBException extends ParentException

@ControllerAdviceをキャッチするクラスをParentException定義し、デリゲート メソッドで特定の動作を定義します。

@ControllerAdvice
public class ParentExceptionHandler {

    @ExceptionHandler(ParentException.class)
    public ResponseEntity<Object> handleParentException(ParentException pe) {
        if (pe instanceof ChildAException) {
            return handleChildAException((ChildAException) pe);
        } else if (...) {
            ...
        } else {
            // handle parent exception
        }
    }

    private ResponseEntity<Object> handleChildAException(ChildAException cae) {
        // handle child A exception
    }
}
于 2019-01-22T06:27:10.767 に答える