spring-mvc中所有控制器的@ExceptionHandler


问题内容

我已经编写了以下控制器来处理代码中的所有异常:

@Controller
public class ErrorHandlerController {

    @ExceptionHandler(value = Exception.class)
    public String redirectToErrorPage(Model model){
        model.addAttribute("message", "error on server");
        return "errorPage";
    }
}

但是看起来以下异常处理程序仅在内部抛出异常时才起作用 ErrorHandlerController

我有大量的控制器。请建议我如何为所有控制器编写一个ExceptionHandler?

聚苯乙烯

我知道我可以使用继承,但是我不确定这是最好的决定。


问题答案:

将对控制器的注释方式从 @Controller 更改为 @ControllerAdvice ,这将使其成为全局异常处理程序

医生说

默认行为(即,如果不带任何选择器使用),@ControllerAdvice带注释的类将辅助所有已知的Controller。

另外,您必须将方法更改为

@ExceptionHandler(value = Exception.class)
public ModelAndView redirectToErrorPage(Exception e) {
    ModelAndView mav = new ModelAndView("errorPage");
    mav.getModelMap().addAttribute("message", "error on server");
    return mav;
}

要了解为什么在使用@ExceptionHandler注释的方法中未解析 模型
参数的原因,请查看http://spring.io/blog/2013/11/01/exception-handling-in-spring-
mvc的
更深
部分