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

时间:2015-02-23 16:05:38

标签: java spring-mvc exception-handling custom-error-pages

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

@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。

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

1 个答案:

答案 0 :(得分:5)

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

文档说

  

默认行为(即,如果没有任何选择器使用),   @ControllerAdvice注释类将协助所有已知的控制器。

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

@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

更深入部分