当异常抛出时重定向请求

3

在我的应用程序(使用Spring框架)中,我尝试使用Spring exposingBean从视图中调用一个方法。当我试图从视图中调用该方法时,它会抛出错误。我尝试使用HandlerExceptionResolver捕获异常,但没有成功,我认为这是因为异常没有被抛到控制器。所以我尝试另一种方式,在异常抛出时重定向请求。我认为切面有可能做到这一点。是否可能在切面中抛出异常时重定向请求?

1个回答

4
正如你所说,当视图内部抛出异常时,HandlerExceptionResolver不会被调用。这些解析器非常具体地针对控制器异常。
在这里,您最好的选择是使用HandlerInterceptor并覆盖afterCompletion方法,该方法将包含视图抛出的异常。您可以从这里发送重定向,具体取决于视图是否已经提交响应。
我不认为切面能帮助您。它不适合这项工作。
然而,我给您的建议是停止在JSP中使用公开的bean。我知道它很方便,但这就是您从中获得的麻烦。我建议您的控制器组装视图所需的所有数据,将其放入模型中,并将其发送到视图。这样,视图触发异常的危险性就更小了,因为它已经拥有了所需的一切。
另外,如果您需要发送重定向,那么您真的需要在视图开始执行之前这样做。否则,视图层可能会在抛出异常之前开始编写HTTP响应头。如果发生这种情况,那么您将无法发送重定向,因为响应已经“提交”了。

+1 - 视图应该执行可能会抛出异常的操作。 - Stephen C
@Stephen:我认为你在某个地方漏掉了一个“不” :) - skaffman
是的,我同意你的观点,我意识到暴露的bean已经超出了Spring范围,并且存在危险。但我仍然不知道如何将数据绑定到模型中,并在多个视图中使用它。有什么建议吗?顺便说一句,谢谢你的回答。 - Jeg Bagus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接