Spring MVC处理异常以及如何在同一视图中显示

时间:2013-08-18 11:18:10

标签: spring spring-mvc

如果我使用@ControllerAdvice@ExceptionHandler处理异常如何在同一个视图中向用户显示错误消息。对于前者假设用户在" customer / new"视图。并调用" save"动作,然后它将转到控制器,我调用方法服务层。但是如果在服务层发生内部异常,我想在同一个" customer / new"上显示错误消息。图。

我编写了一个单独的类来处理异常,如下所示。

@ControllerAdvice
public class DefaultControllerHandler {

    @ExceptionHandler({MyProjectException.class, DataAccessException.class})
    public ResponseEntity<String> handleInternalErrorException(Exception e) {
        logger.error(e.getMessage(), e);

        return new ResponseEntity<String>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);

    }
}

欣赏您的想法。 谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用Flash重定向属性。

@RequestMapping(value = "/administrator/users", method = RequestMethod.POST)
public String adminAddUser(@ModelAttribute("user") @Valid User user, BindingResult bindingResult, Model model, RedirectAttributes redirectAttrs) {
    String redirectUrl = "/administrator/users";
    try {
        userService.save(user);
    } catch (YourServiceException e) {
        redirectAttrs.addFlashAttribute("errorMessage", "error occured: " + e.getMessage());
        redirectAttrs.addFlashAttribute("userObject", user);
        redirectUrl = "/administrator/users?form"; // If error - return to same view
    }
    return "redirect:" + redirectUrl;
}

@RequestMapping(value = "/administrator/users", params = "form", method = RequestMethod.GET, produces = "text/html")
public String adminUsersList(@ModelAttribute("errorMessage") final String errorMessage, @ModelAttribute("userObject") final User user Model model) {
    if(user == null) {
            user = new User();
    }
    model.addAttribute("user", user);
    if(errorMessage != null) {
        model.addAttribure("errorMessage", errorMessage);
    }
    return "administrator/users/create";
}

在这种情况下,您必须在users.jsp页面上显示部分以显示errorMessaage。像这样:

<c:if test="${not empty errorMessage}">${errorMessage}</c:if>

如果你可以从控制器方法获取url路径和redirectAttributes - 你可以通过@ControllerAdvice

来实现

答案 1 :(得分:0)

我能想到的唯一解决方案是调用服务层AJAX,然后仅在没有错误的情况下重定向,如果没有显示错误消息。

在您的Javascript文件中可能看起来像这样

$("#someButton").click(function(){
         //make your ajax call
         if (noError){
    window.location.href = contextPath+"/somePath";
         }
        else{
           //display your error message
       }
});