Spring MVC异常处理有三种方案:
1.使用@ExceptionHandler注解。
public class AccountController {
@ExceptionHandler
public void handleException() {}
}
@ExceptionHandler是Controller级别的,不是整个应用程序全局有效。给每个controller添加对应的@ExceptionHandler方法会很繁琐。可以让所有Controller类继承BaseController类,在BaseController类里面添加@ExceptionHandler修饰的方法进行异常处理。
2. 使用HandlerExceptionResolver可以实现一个统一的异常处理机制。Spring提供了以下HandlerExceptionResolver可以使用:
ExceptionHandlerExceptionResolver是@ExceptionHandler机制工作的核心组件。
DefaultHandlerExceptionResolver用于将标准的Spring异常解析为相应的http状态码。
ResponseStatusExceptionResolver主要用于把修饰自定义异常的@ResponseStatus注解映射对应异常到相应的http状态码。
SimpleMappingExceptionResolver和AnnotationMethodHandlerExceptionResolver
自定义 HandlerExceptionResolver可以返回一个ModelAndView对象,可以设置需要的任何内容。
3. 新的@ControllerAdvice提供了一个全局的@ExceptionHandler 异常处理机制。
@ControllerAdvice
public class ExceptionHandler {
@ExceptionHandler(Exception.class)
public Result handleException(Exception e) {
// todo
}
}
@ControllerAdvice允许把分散在多个Controller的@ExceptionHandler合并到单个全局错误处理组件中。