SSM项目统一异常处理方案

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Yubu_/article/details/75058962

项目中的异常处理是项目开发中的重要部分,合理的异常处理方案,对于提高项目开发效率,影响较大。

SSM项目中采用如下方案进行异常处理:

1 对于DAO层抛出的sql异常,已经由myBatis包装成了运行时异常,不需要再进行包装

2 对于Service层可能会抛出的检查异常,catch,包装成运行时异常抛出

3 对于在 close 操作中抛出的检查异常,catch,记录日志,不再包装抛出

4 controller层抛出的异常直接声明抛出

5 准备一个500.jsp页面,自定义一个异常处理器(HandlerExceptionResolver),用来捕获所有异常

6 准备一个400.jsp页面,在web.xml中进行配置

7 其它情况


400错误配置

<error-page>
        <error-code>404</error-code>
        <location>/WEB-INF/jsp/404.jsp</location>
    </error-page>


异常处理器

@Component
public class MyHandlerExceptionResolver implements HandlerExceptionResolver {

    private static final Logger logger = LogManager.getLogger(MyHandlerExceptionResolver.class);

    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
            Exception ex) {

        logger.error("服务器出错", ex);

        //如果是ajax请求,就返回一个json格式的出错提示信息
        if (request.getHeader("X-Requested-With") != null) {
            try {
                response.getWriter().println(JsonUtils.toJson(AjaxResult.errorInstance("服务器出错了")));
            } catch (IOException e) {
                logger.error("服务器失败时发送错误提示信息失败", e);
            }
            //返回一个空的ModelAndView表示已经手动生成响应
            //return null表示使用默认的处理方式,等于没处理
            return new ModelAndView();
        } else {
            return new ModelAndView("500");
        }
    }
}


猜你喜欢

转载自blog.csdn.net/Yubu_/article/details/75058962