使得访问/exception一定会产生异常: some exception
@Controller
public class ExceptionController {
@RequestMapping("/exception")
public String testException(Model model) throws Exception {
model.addAttribute("now", DateFormat.getDateTimeInstance().format(new Date()));
if(true){
throw new Exception("some exception");
}
return "hello";
}
}
再写个全局异常处理类
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
public ModelAndView defaultErrorHandler(HttpServletRequest request, Exception e) throws Exception {
ModelAndView mav=new ModelAndView();
mav.addObject("exception",e);
mav.addObject("url",request.getRequestURL());
mav.setViewName("errorPage");
return mav;
}
}
- @ExceptionHandler:统一处理某一类异常,从而能够减少代码重复率和复杂度
- @ControllerAdvice:异常集中处理,更好的使业务逻辑与异常处理剥离开
- 如果单使用
@ExceptionHandler
,只能在当前Controller中处理异常。但当配合@ControllerAdvice
一起使用的时候,就可以摆脱那个限制了
先看一下第一个:
该注解作用对象为方法,并且在运行时有效,value可以指定异常类。 //可以直接写@ExceptionHandler,不指明异常类,会自动映射
第二个:
如果全部异常处理都返回json,那么可以使用 @RestControllerAdvice 代替 @ControllerAdvice ,这样在方法上就可以不需要添加 @ResponseBody。
- @ExceptionHandler和@ControllerAdvice能够集中异常,使异常处理与业务逻辑分离
效果: