Pra*_*ore 6 java spring exception-handling spring-mvc spring-aop
我有自定义异常扩展异常(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");
}
}
Run Code Online (Sandbox Code Playgroud)
我的意图:从控制器建议中记录 MyException1
在控制器本身的处理程序中记录 MyException2
从控制器建议记录 MyException3
MyException2 和 MyException3 按预期工作,但 MyException1 失败并显示
“无法调用 @ExceptionHandler 方法 .....handleMyException1”
您可以选择以下选项之一进行异常处理:
选项(1):@ExceptionHandler(MyException1.class)从控制器中删除方法,以便它会被自动处理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");
}
}
Run Code Online (Sandbox Code Playgroud)
PS:我这里没有添加Option(3),这是手动调用的,MyGlobalExceptionHandler这handleAllException()不是一个好的做法。相反,您应该简单地抛出异常,然后系统@ExceptionHandler会自动处理。
手动调用的另一个问题是,在将来的某个时间点,调试异常将会出现问题,因为有些流程是手动调用的MyGlobalExceptionHandler,有些流程是由框架调用的。
| 归档时间: |
|
| 查看次数: |
4976 次 |
| 最近记录: |