SpringBoot----全局异常处理
1、使用上个例子springboot2中的代码,在UserController.java中添加一个方法,代码如下:
/**
* @Description:测试异常类是否生效,返回json数据
* 访问地址:http://localhost:8080/users/zeroException
* @return
* @author:zoey
* @date:2018年3月8日
*/
@RequestMapping("/zeroException")
@ResponseBody
public int zeroException() {
System.out.println("进入异常测试方法");
return 100/0;
}
2、SpringBootBaseApplication.java启动类代码不变,如下:
package com.etc.springboot2;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
/**
* @Description:启动类,启动整个项目
* @author zoey
* @date:2018年3月7日
*/
@SpringBootApplication
@ComponentScan(basePackages="com.etc.*")//如果不写,默认扫描这个包下的所有类还有子包下的所有类
@MapperScan(value = "com.etc.mapper")//这样才能找到mapper文件
public class SpringBootBaseApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootBaseApplication.class, args);
System.out.println("启动完成。。。。。。。。。。。");
}
}
3、如果直接访问异常方法,页面进入错误页面error.jsp,控制台报错:
访问地址:http://localhost:8080/users/zeroException,效果如下:
控制台报错如下:
4、要处理这种异常,在com.etc.exception包下新建GlobalDefaultExceptionHandler.java类如下:
package com.etc.exception;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
/**
* @Description:全局异常类,处理项目中的异常(统一处理)
* 统一处理的步骤:
1、新建一个类GlobalDefaultExceptionHandler,
2、在class注解上@ControllerAdvice,
3、在方法上注解上@ExceptionHandler(value = Exception.class)
* @author zoey
* @date:2018年3月8日
*/
@ControllerAdvice
public class GlobalDefaultExceptionHandler {
@ExceptionHandler(value = Exception.class)
public void defaultErrorHandler(HttpServletRequest request, Exception e) {
//打印异常信息
e.printStackTrace();
System.out.println("GlobalDefaultExceptionHandler.defaultErrorHandler()");
}
}
5、再次访问http://localhost:8080/users/zeroException, 页面不报错,显示空白,效果如下:
控制台显示异常信息如下:
总结如下:
想要捕获项目中的异常,步骤如下:
1、在com.etc.exception包下新建一个全局异常类GlobalDefaultExceptionHandler.java
2、在GlobalDefaultExceptionHandler.java类上面添加@ControllerAdvice注解
3、在类中编写defaultErrorHandler()方法,然后打印异常信息
4、在defaultErrorHandler()方法上添加 @ExceptionHandler(value = Exception.class)注解