您的位置:首页 > 编程语言 > Java开发

Spring MVC 统一异常处理总结

2017-02-15 16:10 465 查看
摘要: 原创出处 http://peijie2016.oschina.io 欢迎转载,保留摘要,谢谢!

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

实现
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring mvc 异常处理