簡體   English   中英

使用@ExceptionHandler HTTP狀態500的SpringMVC-預期的會話屬性

[英]SpringMVC using @ExceptionHandler HTTP Status 500 - Expected session attribute

我想使用@exceptionhandler捕獲HTTP Status 500-Expected會話屬性 我想在顯示錯誤消息的同一頁面上返回一條消息。

有人可以給我指出一個有關如何處理此異常並向視圖返回消息而不是重定向到另一個頁面的示例。

到目前為止,這就是我所擁有的,但是視圖中的項目未設置錯誤消息;

@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>

您可以通過執行以下操作從@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方法內部獲取當前模型和視圖,因此您將無法掌握使用哪種視圖的好方法。

我認為您最好的選擇是在控制器中捕獲並處理Exception。

您可以獲取引薦來源並將其轉發或重定向到它。 例如

@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相對於應用程序路徑。 您可以從引薦來源中提取它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM