2015-10-02 58 views
1

这应该是解决方案的一个常见问题,但我没有设法在任何地方找到它。Spring MVC ExceptionHandler和控制器上下文

我正在使用@ControllerAdvice定义一个全局异常处理程序,我定义了一个新的ModelAndView并重定向到了我的错误页面。非常好,除了现在我们想添加一个链接回到原来的页面,这当然可以根据错误发生的位置而变化。

我想要做的是存储某种关于生成错误的控制器的上下文信息,例如,如果它是MyController,那么我可以通过MyController.EXCEPTION_REDIRECT_URL访问一个值并生成相应的链接。

我发现在异常处理程序中缺少上下文信息而非限制。

回答

0

制作一个自定义的异常类并在exeption中传递您的上下文。

class MyException extends Exception { 
    private MyController c; 
    MyException(String msg, MyController c) {...} 
    ... 
} 

我觉得有更好的方法,可能围绕请求上下文对象旋转。但是,这将做到你想要的。

+0

谢谢,我知道我可以做到这一点,但这将需要我赶上原来的异常,并包装/抛出我不想做的自定义异常,因为它不仅增加了更多的代码和混乱的代码库我希望异常处理对于AOP的概念是透明的。我只是想避免在所有控制器的每个请求处理程序中放入try catch,我觉得有点失败的目的。 – funnyman7878

+0

@ funnyman7878我一直觉得,抛出域特定的例外更好......我2美分。你可以注入诸如请求上下文之类的东西,尽管老实说我不记得该怎么做。你也可以创建一些请求作用域的对象,并将其放入其中。 – xenoterracide

+0

请注意,抛出的异常可能会阻止输入参数验证,并且即使在进入代码之前也会触发。 –