![](/img/trans.png)
[英]How to handle 404 exceptions using @ControllerAdvice and @ExceptionHandler?
[英]How to handle exception thrown from ExceptionHandler in controller with ExceptionHandler in ControllerAdvice?
我有自定義異常擴展異常(MyException1,MyException2,MyException3)
@Controller
public class MyController {
/*
Method throwing MyException1
Method throwing MyException2
Method throwing MyException3
*/
@ExceptionHandler(MyException1.class)
public void handleMyException1(Exception ex){
//Do something
throw ex;
}
@ExceptionHandler(MyException2.class)
public void handleMyException2(Exception ex){
System.out.println("Exception Logged inside Controller")
}
}
@ControllerAdvice
public class MyGlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public void handleAllException(Exception ex){
System.out.println("Exception logged Outside Controller");
}
}
My Intention: To log MyException1 from controller advice To log MyException2 inside handler in controller itself To log MyException3 from controller advice MyException2 and MyException3 are working as intended but MyException1 fails with
"Failed to invoke @ExceptionHandler method .....handleMyException1"
您可以為異常處理選擇以下選項之一:
選項(1) :從Controller中刪除@ExceptionHandler(MyException1.class)
方法,以便MyGlobalExceptionHandler
自動處理MyGlobalExceptionHandler
。
選項(2):創建MyException4
(其是用於包裝MyException1
具有添加信息),如下圖所示,從控制器把它:
@Controller
public class MyController {
/*
Method throwing MyException1
Method throwing MyException2
Method throwing MyException3
*/
@ExceptionHandler(MyException1.class)
public void handleMyException1(Exception ex){
//MyException4 exe4 = new MyException4();
// Add the required details to it
throw exe4;
}
@ExceptionHandler(MyException2.class)
public void handleMyException2(Exception ex){
System.out.println("Exception Logged inside Controller")
}
}
@ControllerAdvice
public class MyGlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public void handleAllException(Exception ex){
System.out.println("Exception logged Outside Controller");
}
}
PS:我沒有在這里添加Option(3),這是手動調用MyGlobalExceptionHandler
的handleAllException()
因為這不是一個好習慣。 相反,你應該簡單地拋出異常, @ExceptionHandler
會自動處理。
手動調用的另一個問題是,在將來的某個時間點,調試異常會有問題,因為一些流手動調用MyGlobalExceptionHandler
並且框架會調用一些流。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.