1

我想使用@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>
4

2 回答 2

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 方法中获取当前模型和视图,因此您无法很好地了解要使用的视图。

我认为你最好的选择是在你的控制器中捕捉和处理异常。

于 2013-05-03T05:52:52.857 回答
1

您可以获取引用并转发或重定向到它。例如

@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";
}

重定向 URL 是相对于应用程序路径的。您可以从referer 中提取它。

于 2013-05-03T12:31:59.790 回答