开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):统一异常处理】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/667/detail/11293
统一异常处理
内容简介:
一、手动模拟异常
二、统一异常处理
三、什么叫依赖传递
一、手动模拟异常
//创建 page 对象
Page<EduTeacher> pageTeacher = new Page<>(current, limit) :
int i = 10/0 :
打开 swagger
,点击/eduserice/teacher/pageTeacher/{current}/{limit}
current : 1
limit : 2
点击 try it out!
结果:
{
"timestamp": "2020-02-24 16:27:55",
"status": 500,
"error": "Internal Server Error",
"message": "/ by zero",
"path": "/eduservice/teacher/pageTeacher/1/2"
}
二、统一异常处理
1.创建统一异常处理器
在 service-base 中创建统一异常处理类
GlobalExceptionHandler.java:
在类上加注解@ControllerAdvice
在类中加方法:(若有异常,则会利用这个方法返回统一数据)
@ExceptionHandler (Exception.class)
@ResponseBody
public R error(Exception e) {
e. printStackTrace();
return R. error();
}
例如:(异常处理类)
//因为 service_base 中已经有了 common_utils,如果再次引入,则 common_utils 就会有多次,所以直接引入service_base 就可以了
@ControllerAdvice
public class GlobalExcept ionHandler {
//指定出现什么异常执行这个方法
@ExceptionHandler(Exception. class)
@ResponseBody
//为了返回数据
public R error (Exception e) { →
//(其中 R 报错,则我们可以把 common_utils 引入到 service_base 中
<artifactId>common_utils</artifactId>)
e. printStackTrace() :
return R. error(). message( "执行了全局异常处理.. ") :
}
三、什么叫依赖传递
common_utile→service_base←service_edu(在 service_base 中引入 common_utile,则在 service_edu 中只需将service_base 引入,service_edu 中就会包含 common_utile,这就叫依赖的传递。若都引入,则会出现重复依赖。
结果:
打开 swagger,
点击
/eduserice/teacher/pageTeacher/{current}/{limit}
current: 1
limit: 2
点击 try it out!
{
"success": false
"code": 20001,
"message": "执行了全局异常处理..",
"date": { }
}