在写项目的过程中,难免会遇到各种各样的自定义异常处理的场景,或者需要自己自定义异常的提示页面那些。
要在SpringBoot中进行异常处理,就不得不聊一下 @ControllerAdvice 这个注解了。
@ControllerAdvice是spring3.2提供的新注解,顾名思义,可以看出它的主要作用是对Controller的增强。这是一个非常有用、可以直接用在SpringBoot中的注解,它具体可以实现三个方面的功能:
1、全局异常处理
2、全局数据绑定
3、全局数据预处理
在这里说一下它的第一个功能:全局异常处理
一般,处理异常的流程都是从mapper --> service --> controller这个顺序往上抛, 当异常从controller抛出去的时候带有@ControllerAdvice的类就会处理controller抛出来的异常。比如写个抛出自定义的异常的controller:
@Controller
public class IndexController {
@GetMapping("/")
public String index() {
String resource = null;
if(resource == null){
throw new NotFoundException("resource is not exits!");
}
return "index";
}
}
自定义异常:
public class NotFoundException extends RuntimeException {
public NotFoundException() { }
public NotFoundException(String message) {
super(message);
}
public NotFoundException(String message, Throwable cause) {
super(message, cause);
}
}
最后写处理全局异常的类:
@ControllerAdvice
public class ControllerExceptionHandle {
@ExceptionHandler(NotFoundException.class)
public ModelAndView exceptionHandler(Exception e) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("msg",e.getMessage());
mv.setViewName("error/error");
return mv;
}
}
这里就是可以将异常处理写成一个个方法,方法上用 @ExceptionHandler 来标记你的异常类就行了,然后用ModelAndView返回到你想设置的错误页面。
结果: