2015-02-23 153 views
1

我已經寫了下面的控制器來處理所有的異常在我的代碼:@ExceptionHandler在所有控制器彈簧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.

我知道我可以使用繼承,但我不確定這是最好的決定。

回答

4

更改你註釋控制器@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

+0

我看到了tomcat的standart 500錯誤 – gstackoverflow 2015-02-23 16:18:12

+0

http://dl1.joxi.net/drive/0005/3037/338909/150223/02052cd5fc.jpg – gstackoverflow 2015-02-23 16:19:29

+0

在d ebug我看到我沒有走進控制器方法 – gstackoverflow 2015-02-23 16:20:53