Spring MVC框架提供了统一处理异常机制,使特定种类的异常对应一段特定的代码,当编写代码时,无论在任何位置,都可以将异常直接抛出,由统一处理异常的代码进行处理。
- 注解:添加@ExceptionHandler注解
- 访问权限:公有
- 返回值类型:处理请求的方法的返回值类型
- 方法名称:自定义
- 参数列表:必须包含1个异常类型的参数,按需添加HttpServletRequest、HttpservletResponse等特定类型的参数,不可以随意添加参数。
@ExceptionHandler
public String handleException(NullPointerException e){
return "Error,NullPointerException!";
}
以上处理异常代码只作用于当前控制器类中请求处理的方法,对其他控制器类中的代码并不产生影响,无法处理其他控制器类的异常。为了更合理处理异常应该:
- 将处理异常代码放在专门的类中
- 类上添加@ControllerAdvice注解或@RestControllerAdvice注解。
GlobalExceptionAdvice类
@RestControllerAdvice
public class GlobalExceptionAdvice {
@ExceptionHandler
public String handleException(NullPointerException e){
return "Error,NullPointerException!";
}
}
Spring MVC的处理模式:
try{
userController.nep();
}catch(NullPointerException e){
globalExceptionHandler.handleException(e);
}
将方法参数声明为Throwable,所有异常都可以被处理。但在处理过程中应判断当前异常归属类型。
在开发实践中
- 通常都会有handleThrowable()方法,以避免某个异常没被处理导致500错误。
- 建议为每一个@ExceptionHandler配置注解参数。
- 处理异常的参数直接用Throwable。
@ExceptionHandler(NullPointerException.class)
public String handleException(Throwable e){
return "Error,NullPointerException!";
}