Spring MVC - 使用@ExceptionHandler处理异常不会呈现新视图

时间:2011-03-28 21:43:20

标签: java model-view-controller spring exception view

我似乎遇到了Spring的限制 - 我有一个简单的案例要处理 - 我正在模拟服务方法的异常:

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

会发生什么事情会触发handleException,但异常视图不会在客户端上呈现。 Spring配置是OK还是不需要web.xml中的条目?我错过了可能是处理程序未被调用的原因吗? 任何反馈都表示赞赏。 谢谢。

2 个答案:

答案 0 :(得分:1)

我发现了问题 - 抛出异常的方法需要与处理程序方法在同一个控制器中。我在同一个控制器中移动了两个方法,一切正常。

答案 1 :(得分:0)

是的,这对我来说似乎很奇怪。如果使用Spring的异常处理功能,则不需要web.xml中的条目。此外,通常您不会混合使用@RequestMapping和@ExceptionHandler。简而言之,您需要的只是......

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