良い一日!
私は持ってい@Controller
ます。そのメソッドのいくつかは同じ例外をスローしますが、この例外を別の方法で処理したいと考えています。
を特定のメソッドにバインドする方法はあり@ExceptionHandler
ますか?
良い一日!
私は持ってい@Controller
ます。そのメソッドのいくつかは同じ例外をスローしますが、この例外を別の方法で処理したいと考えています。
を特定のメソッドにバインドする方法はあり@ExceptionHandler
ますか?
メソッドに固有のものを指定することはできないと思いますが、メソッドを特定@ExceptionHandler
の にバインドすることはできます。@ExceptionHandler
Exception
したがって、ある方法ですべてを処理し、他のすべての例外を別の方法で処理したい場合は、次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
}
}