【问题标题】:Spring MVC - Dynamic Error Handling PageSpring MVC - 动态错误处理页面
【发布时间】:2013-01-18 12:23:44
【问题描述】:

有没有办法处理所有可能的错误代码,同时仍将代码传递给我的 .jsp?在这里,我有一个错误页面传递 404,它被添加到模型中。与其为每个可能的错误代码添加错误页面,有没有更好的方法可以捕获错误并将代码传递给控制器​​/jsp 文件?

控制器

@RequestMapping(value="/error/{code}", method=RequestMethod.GET)
    public String error(@PathVariable("code") String code, Model model)
    {
        model.addAttribute("code", code);
        return "error";
    }

web.xml

<error-page>
    <error-code>404</error-code>
    <location>/error/404</location>
</error-page>

【问题讨论】:

    标签: java spring spring-mvc error-handling


    【解决方案1】:

    您可以在 Spring 中注册一个通用异常解析器来捕获所有异常并转换为您的 error.jsp 的呈现。

    使用您的业务逻辑抛出的专用 RuntimeException,它有一个 code 成员:

    public class MyException extends RuntimeException {
        private final Integer errorCode;
    
        public MyException(String message, Throwable cause, int errorCode) {
            super(message, cause);
            this.errorCode = errorCode;
        }
    }
    

    或者在异常消息中使用您的code 依赖现有的 RuntimeException 实例。

    提取code 和/或消息并相应地设置HttpServletResponse 状态和ModelAndView。

    例如:

    import org.springframework.stereotype.Component;
    import org.springframework.web.servlet.DispatcherServlet;
    import org.springframework.web.servlet.HandlerExceptionResolver;
    import org.springframework.web.servlet.ModelAndView;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @Component(DispatcherServlet.HANDLER_EXCEPTION_RESOLVER_BEAN_NAME)
    public class GenericHandlerExceptionResolver implements HandlerExceptionResolver {
    
        @Override
        public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception e) {
            ModelAndView mav = new ModelAndView("error");
    
            if (e instanceof MyException) {
                MyException myException = (MyException) e;
                String code = myException.getCode();
    
                // could set the HTTP Status code
                response.setStatus(HttpServletResponse.XXX);
    
                // and add to the model
                mav.addObject("code", code);
            } // catch other Exception types and convert into your error page if required
    
            return mav;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-07-03
      • 2023-03-10
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      相关资源
      最近更新 更多