spring-mvc 中所有控制器的@ExceptionHandler
@ExceptionHandler for all controllers in spring-mvc
我编写了以下控制器来处理我代码中的所有异常:
@Controller
public class ErrorHandlerController {
@ExceptionHandler(value = Exception.class)
public String redirectToErrorPage(Model model){
model.addAttribute("message", "error on server");
return "errorPage";
}
}
但看起来只有在内部抛出异常时以下异常处理程序才会工作 ErrorHandlerController
我有很多控制器。请告诉我如何为所有控制器编写一个 ExceptionHandler?
P.S.
我知道我可以使用继承,但我不确定这是最好的决定。
将您注释控制器的方式从 @Controller 更改为 @ControllerAdvice,这将使它成为全局异常处理程序
文档说
The default behavior (i.e. if used without any selector), the
@ControllerAdvice annotated class will assist all known Controllers.
此外,您必须将方法更改为类似
@ExceptionHandler(value = Exception.class)
public ModelAndView redirectToErrorPage(Exception e) {
ModelAndView mav = new ModelAndView("errorPage");
mav.getModelMap().addAttribute("message", "error on server");
return mav;
}
要了解为什么 model 参数在使用 @ExceptionHandler 注释的方法中未解析,请查看 going deeper 部分 http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
我编写了以下控制器来处理我代码中的所有异常:
@Controller
public class ErrorHandlerController {
@ExceptionHandler(value = Exception.class)
public String redirectToErrorPage(Model model){
model.addAttribute("message", "error on server");
return "errorPage";
}
}
但看起来只有在内部抛出异常时以下异常处理程序才会工作 ErrorHandlerController
我有很多控制器。请告诉我如何为所有控制器编写一个 ExceptionHandler?
P.S.
我知道我可以使用继承,但我不确定这是最好的决定。
将您注释控制器的方式从 @Controller 更改为 @ControllerAdvice,这将使它成为全局异常处理程序
文档说
The default behavior (i.e. if used without any selector), the @ControllerAdvice annotated class will assist all known Controllers.
此外,您必须将方法更改为类似
@ExceptionHandler(value = Exception.class)
public ModelAndView redirectToErrorPage(Exception e) {
ModelAndView mav = new ModelAndView("errorPage");
mav.getModelMap().addAttribute("message", "error on server");
return mav;
}
要了解为什么 model 参数在使用 @ExceptionHandler 注释的方法中未解析,请查看 going deeper 部分 http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc