SpringMVC统一异常处理总结

摘要: 原创出处 http://peijie-sh.github.io 欢迎转载,保留摘要,谢谢!

在一个Spring MVC项目中,使用统一异常处理,可以使维护代码变得容易。下面总结一下常用的3种方法。


try-catch

实现HandlerExceptionResolver接口

实现HandlerExceptionResolver接口,实现resolveException()方法,根据传入的异常类型做出处理。

继承AbstractHandlerExceptionResolver

继承AbstractHandlerExceptionResolver类,和第一种方式类似,因为AbstractHandlerExceptionResolver实现了HandlerExceptionResolver接口。
所以,我们继承之后也是重写resolveException()方法,再处理各种异常。

使用注解@ControllerAdvice处理

推荐使用这种方法,比较直观。下面上代码:

首先是自定义异常类

public class ResourceDoesNotExistException extends RuntimeException {
    private static final long serialVersionUID = 7833283455112352655L;

    public ResourceDoesNotExistException() {
        super();
    }

    public ResourceDoesNotExistException(String message) {
        super(message);
    }

    public ResourceDoesNotExistException(String message, Throwable cause) {
        super(message, cause);
    }

    public ResourceDoesNotExistException(Throwable cause) {
        super(cause);
    }

    protected ResourceDoesNotExistException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

然后是全局异常统一处理类:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(value = OtherException.class)
    public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception ex) {
        // 其他异常处理逻辑...
    }

    @ExceptionHandler(value = ResourceDoesNotExistException.class)
    public ModelAndView notFoundErrorHandler(HttpServletRequest req, ResourceDoesNotExistException ex) {
        ModelAndView mav = new ModelAndView();
        mav.setViewName("404");
        return mav;
    }
}

添加@ControllerAdvice注解的类是集中处理异常的地方,可以同时存在多个这样的类,用来做更细粒度的划分。
在这个类中,我们可以对每一种异常编写一种处理逻辑,在方法上使用@ExceptionHandler注解修饰,传入指定的异常类型即可。
如果是RESTful风格,不返回视图,也可使用@RestControllerAdvice

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,366评论 25 708
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,290评论 6 342
  • 在经过一次没有准备的面试后,发现自己虽然写了两年的android代码,基础知识却忘的差不多了。这是程序员的大忌,没...
    猿来如痴阅读 3,141评论 3 10
  • PS:只是对通过APP Icon的按压快速进入页面的使用说明,无其它干货! 在后台模式时通过3D Touch进入程...
    Zero_D_Saber阅读 981评论 1 2
  • 此文用来记录一些日常中因为将闽南语直译成普通话发生的趣事。(ღ˘⌣˘ღ) 1.和舍友(绍兴人)骑自行车。 我说:“...
    山抹微云Flora阅读 2,682评论 0 0

友情链接更多精彩内容