【问题标题】:@ExceptionHandler for all controllers in spring-mvc@ExceptionHandler 用于 spring-mvc 中的所有控制器
【发布时间】:2015-04-25 00:34:20
【问题描述】:

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

@Controller
public class ErrorHandlerController {

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

但看起来只有在ErrorHandlerController 内抛出异常时,以下异常处理程序才会起作用

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

附言

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

【问题讨论】:

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


    【解决方案1】:

    将控制器的注释方式从 @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;
    }
    

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

    going deep 部分

    【讨论】:

    • 在调试中我看到我没有进入控制器方法
    • 是的,它不会解析全局异常处理程序中的参数,我已经进行了编辑
    • 是的,它有效。但我不明白原因。请解释一下。
    猜你喜欢
    • 2017-09-23
    • 2012-04-12
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 2019-12-15
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多