springboot全局异常处理
@ControllerAdvice
尽管springboot会对一些异常进行处理,不过对于开发者来说,这还不太便于维护,因此我们需要自己来对异常进行统一的捕获与处理。这里就需要使用上一个注解@ControllerAdvice。
@ControllerAdvice注解:
ControllerAdvice拆分开来就是Controller Advice ,关于Advice,在Spring Aop中可知其是用于封装一个切面所有属性,包括切入点和需要织入的切面逻辑。这里ContrllerAdvice也可以这么理解,其抽象级别应该是用于对Controller进行“切面”环绕的,而具体的业务织入方式则是通过结合其他的注解来实现的。
简单来讲,@ControllerAdvice
就是一个Controller增强器,可以对Controller中被@RequestMapping
注解的方法增加一些逻辑处理。
常见使用方式:
- 结合方法型注解
@ExceptionHandler
,用于捕获Controller中抛出的指定类型的异常,从而达到不同类型的异常区别处理的目的 - 结合方法型注解
@InitBinder
,用于request中自定义参数解析方式进行注册,从而达到自定义指定格式参数的目的 - 结合方法型注解
@ModelAttribute
,表示其标注的方法将会在目标Controller方法执行之前执行
全局异常处理类
这里我们使用@ControllerAdvice
注解来实现全局异常处理。
声明了全局异常处理类之后,我们还需要通过@ExceptionHandler
来捕获异常
而这里对异常的处理方式也由我们根据需求而定,因为这里就相当于是一个参数为捕获到的异常的Controller,所以我们可以实现直接返回异常信息,也可以跳转页面等一系列操作。
这里简化一下,就直接捕获Excecption,实际使用中可以再细化到各种不同的异常进行不同的处理。
@ControllerAdvice
public class BaseExceptionHandler {
/**
* 异常处理
* @param e
* @return
*/
@ExceptionHandler
@ResponseBody
public Result error(Exception e){
e.printStackTrace();
return new Result(false, StatusCode.ERROR,e.getMessage()+"请联系XXX进行处理");
}
}