SpringMVC使用@ExceptionHandler HTTP状态500 - 预期的会话属性

时间:2013-05-03 03:26:01

标签: java spring spring-mvc

我想使用 @exceptionhandler 来捕获 HTTP状态500 - 预期的会话属性。我想将消息返回到我向用户显示错误的同一页面。

有人能指出我如何处理此异常并向视图返回消息而不是重定向到另一个页面的示例。

这是我到目前为止的情况,但是视图中的项目没有设置错误消息;

@ExceptionHandler(HttpSessionRequiredException.class)
    public RedirectView handleHttpSessionRequiredException(Exception ex, HttpServletRequest request) throws Exception
    {
        logger.info("In the handleHttpSessionRequiredException Handler Method");
        String referrer = request.getHeader("referer");
        RedirectView redirectView = new RedirectView(referrer);
        redirectView.addStaticAttribute("errorMessage","Execute A Query Then Retry");
        return redirectView;
    }

查看

<label id="errorMessage" name="errorMessage">${errorMessage}</label>

2 个答案:

答案 0 :(得分:1)

您可以通过执行以下操作从@ExceptionHandler方法返回ModelAndView。

@ExceptionHandler(IOException.class)
public ModelAndView handleIOException(IOException ex) {
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("someObject", new SomeObject());
    modelAndView.setViewName("someView");
    return modelAndView;
}

问题在于找出您以前的当前页面。据我所知,没有办法从ExceptionHandler方法中获取当前模型和视图,因此您无法很好地了解要使用的视图。

我认为最好的办法是在控制器中捕获并处理异常。

答案 1 :(得分:1)

您可以获取引用并转发或重定向到它。 E.g。

@ExceptionHandler(HttpSessionRequiredException.class)
public String (HttpServletRequest request) {
    String referrer = request.getHeader("referer");
    ...
    FlashMap flashMap = RequestContextUtils.getOutputFlashMap(request);
flashMap.put("errorMessage","Execute A Query Then Retry");
    return "redirect:/my/url";
}

重定向网址相对于应用程序路径。您可以从引用者中提取它。