@ControllerAdvice注解是@Controller注解的一种增强,它主要有以下几方面的功能:
1、全局异常处理
2、全局数据绑定
3、全局数据预处理
以上三个功能是springmvc提供的,我们在spring boot中可以直接使用
全局异常处理
使用 @ControllerAdvice 实现全局异常处理,然后定义类,添加该注解即可,下面我们来看看具体的实现方式
创建项目
这里要用到thymeleaf模板,在项目创建后选择thymeleaf模板即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
定义controller类
package com.zhouym.exceptionsolve;
import org.springframework.web.bind.annotation.GetMapping;
/**
* 〈异常类〉
*
* @author zhouym
* @create 2019/8/8
* @since 1.0.0
*/
@RestController
public class HelloController {
@GetMapping("/query")
public void hello(){
int num = 1 / 0;
}
}
定义全局异常处理类
在类上添加@ControllerAdvice注解,在方法中添加异常处理器的注解,参数可以使具体的异常类,也可以是全局异常类
@ExceptionHandler 注解用来指明异常的处理类型,即如果这里指定为 NullpointerException,则数组越界异常就不会进到这个方法中来。
package com.zhouym.exceptionsolve;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
/**
* 〈全局异常处理〉
*
* @author zhouym
* @create 2019/8/8
* @since 1.0.0
*/
@ControllerAdvice
public class MyGlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ModelAndView myerroe(Exception e){
ModelAndView mv = new ModelAndView();
mv.setViewName("myerror");
mv.addObject("error",e.getMessage());
return mv;
}
}
在resources目录下的templates目录中创建一个html页面,在页面中导入thymeleaf的约束协议
<!DOCTYPE html>
<html lang="en