2011-03-28 80 views
0

我似乎是對抗春季的限制 - 我有一個簡單的例子來處理 - 我從一個服務方法模擬異常:Spring MVC中 - 與@ExceptionHandler處理異常不呈現新的視圖

@RequestMapping(method = RequestMethod.POST) 
public String register(@RequestParam("mail") String mail){ 
    throw new IllegalStateException(); 
} 

,並試圖通過辦理了新的要求:

@RequestMapping(value = "/exception_location") 
@ExceptionHandler(IllegalStateException.class) 
public String handleException(IllegalStateException ex){ 
    return "exception_view"; 
} 

我的web.xml:

<error-page> 
    <exception-type>java.lang.IllegalStateException</exception-type> 
    <location>/exception_location</location> 
</error-page> 

發生了,我什麼s handleException會被觸發,但異常視圖不會呈現在客戶端上。 Spring配置是否正常,或者web.xml中的條目不需要?我是否缺少可能導致處理程序未被調用的原因? 任何反饋意見。 謝謝。

回答

1

我已經找到了問題 - 拋出異常的方法必須與處理方法相同的控制器。我在同一個控制器中移動了兩個方法,一切正常。

0

Ek,這對我來說似乎很奇怪。如果您使用Spring的異常處理功能,則不需要web.xml中的條目。此外,通常您不會混合使用@RequestMapping和@ExceptionHandler。總之,一切你應該需要的是...

@ExceptionHandler(IllegalStateException.class) 
public String handleException(IllegalStateException ex){ 
    return "exception_view"; 
} 
+0

感謝您的回覆。不幸的是,這樣做並不會觸發handleException方法。 – Eugen 2011-03-29 05:42:38

+0

喔,你確定?你是否通過調試來驗證?我知道它可以工作,因爲我一直都在使用它(事實上只是在昨天)。 – 2011-03-29 12:52:03

+0

是的,我調試它,它根本不會被調用。我會繼續挖掘,也許有些東西我沒有正確設置。謝謝。 – Eugen 2011-03-30 08:32:22