下面创建一个GlobalExceptionHandler.java,作为 全局异常处理类
1、@ControllerAdvice
控制器增强 (可以理解为:增加控制器功能),放在类上面
特点:必须让框架知道这个注解所在的包名,需要在springmvc配置文件声明 组件扫描器
指定 @ControllerAdvice 所在的全局异常处理类包名
1
2
3
4
2、@ExceptionHandler
@ExceptionHandler(异常的class):表示异常的类型,当发生此类型的异常时,由当前方法处理。放在方法上面
处理异常的方法和控制器方法的定义一样,可以有多个参数,可以有ModelAndView,String,void,对象类型的返回值
形参:Exception,表示Controller中抛出的异常对象,通过形参可以获取发送的异常信息
1
2
3
4
GlobalExceptionHandler.java
//@ControllerAdvice 增强控制器
@ControllerAdvice
public class GlobalExceptionHandler {
//处理NameException异常
@ExceptionHandler(value = NameException.class)
public ModelAndView doNameException(Exception exception){
ModelAndView mv = new ModelAndView();
mv.addObject("msg","用户名必须是zs,其他用户不能访问");
mv.addObject("ex",exception);
//指定视图
mv.setViewName("nameError");
return mv;
}
//处理AgeException异常
@ExceptionHandler(value = AgeException.class)
public ModelAndView doAgeException(Exception exception){
ModelAndView mv = new ModelAndView();
mv.addObject("msg","年龄输入范围有误");
mv.addObject("ex",exception);
mv.setViewName("ageError");
return mv;
}
//处理NameException,AgeException以外的,不知类型的异常
@ExceptionHandler
public ModelAndView doOtherException(Exception exception){
ModelAndView mv = new ModelAndView();
mv.addObject("msg","其他不知类型的异常");
//指定视图
mv.setViewName("defaultError");
return mv;
}
}