@ControllerAdvice和@ExceptionHandler拦截异常并统一处理
@ControllerAdvice顾名思义就是controller的增强器,@ControllerAdvice注解将作用在所有注解了@RequestMapping的控制器的方法上。(如果全部异常处理返回json,那么可以使用 @RestControllerAdvice 代替 @ControllerAdvice ,这样在方法上就可以不需要添加 @ResponseBody。)
@ExceptionHandler:用于全局处理控制器里的异常。
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
//其中value可以是自定义异常,可以在这个类中再加个方法去处理
public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
ModelAndView mav = new ModelAndView();
mav.addObject("exception",e);
mav.addObject("url",req.getRequestURL());
mav.setViewName("errorPage");
return mav;
}
}
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello(Model m) throws Exception {
m.addAttribute("now", DateFormat.getDateTimeInstance().format(new Date()));
if(true){
throw new Exception("some exception");
}
return "hello";
}
}