【发布时间】:2013-12-05 09:00:19
【问题描述】:
我正在使用以下代码处理我的受控异常:
@ExceptionHandler(MyException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public ModelAndView handleMyException(MyException e) {
ModelAndView mav = new ModelAndView(ERROR_PAGE);
(...)
return mav;
}
也就是说,我想对不同的错误使用自定义视图,并对 HTTP 响应使用响应状态代码。
同时,对于纯 404 我在 web.xml 中有以下配置
<error-page>
<error-code>404</error-code>
<location>/404</location>
</error-page>
<error-page>
<error-code>400</error-code>
<location>/400</location>
</error-page>
采用 404 特定视图。
问题是当NOT_FOUND从我的@ExceptionHandled方法抛出时,它没有显示我的自定义视图,调试显示执行实际上是通过handleMyException方法,但是在它完成之后它也通过在 web.xml 中映射/404 的方法,即显示的视图。
此外,如果我抛出不同的响应代码,我会在异常上获得默认行为,而不是我的自定义视图。
【问题讨论】:
-
你的问题我不清楚。 1) ERROR_PAGE 的值是多少? 2)什么是实际行为,什么是想要的行为? 3)请澄清“NOT_FOUND is throw from my @ExceptionHandled method”是指“@ExceptionHandled method set response code to NOT_FOUND”
-
你有什么不明白的?
-
总结一下:我想在抛出某个异常时显示我的自定义错误视图,并且仍然返回404的响应代码。问题是,通过定义实际404发生时的默认操作,它会覆盖我在 @ExceptionHandler 方法上设置的视图。
-
现在清除。但答案是未知的......
-
你的Spring版本和应用服务器是什么?我检查了 Spring 3.2.5.RELEASE 和 Jetty 9.0.6,但无法重现您的情况。而且我认为根据 Servlet 3.0 规范(使用给定的 Spring 版本)它不应该是可重现的
标签: spring http jakarta-ee spring-mvc