良い一日!
私は持ってい@Controllerます。そのメソッドのいくつかは同じ例外をスローしますが、この例外を別の方法で処理したいと考えています。
を特定のメソッドにバインドする方法はあり@ExceptionHandlerますか?
良い一日!
私は持ってい@Controllerます。そのメソッドのいくつかは同じ例外をスローしますが、この例外を別の方法で処理したいと考えています。
を特定のメソッドにバインドする方法はあり@ExceptionHandlerますか?
メソッドに固有のものを指定することはできないと思いますが、メソッドを特定@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
}
処理方法に応じて、他のメソッドによってスローされた一般的な例外からサブ例外を派生させることができます。
親例外を として宣言したとします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
}
}