课程名称:Spring Cloud 进阶 Alibaba 微服务体系自媒体实战
课程章节: 第3章 开发通行证有关服务
主讲老师: 风间影月
课程内容
对于一些小系统来讲,出现异常直接抛就行,甚至不规范的使用,但是我们这里规范一些,引入自定义异常,这么一来可以更加规范我们的项目。
但是本课程的学习当中,希望将系统做大做强,以及为后期将系统改成微服务化做准备。
如果对异常信息进行了封装。具体参考如下:
package com.imooc.exception;
import com.imooc.grace.result.ResponseStatusEnum;
/**
* 优雅处理异常,统一封装
*/
public class GraceException {
public static void display(ResponseStatusEnum responseStatus) {
throw new MyCustomException(responseStatus);
}
}package com.imooc.exception;
import com.imooc.grace.result.ResponseStatusEnum;
import com.imooc.utils.MD5Utils;
/**
* 自定义异常
* 目的:1. 统一异常处理和管理
* 2. service与controller错误解耦,不会被service返回的类型而限制
*
* RuntimeException: 没有侵入性,如果继承Exception,则代码中需要使用try/catch
*/
public class MyCustomException extends RuntimeException {
private ResponseStatusEnum responseStatus;
public MyCustomException(ResponseStatusEnum responseStatus) {
super("异常状态码: " + responseStatus.status() + "; 异常信息: " + responseStatus.msg());
this.responseStatus = responseStatus;
}
public ResponseStatusEnum getResponseStatus() {
return responseStatus;
}
public void setResponseStatus(ResponseStatusEnum responseStatus) {
this.responseStatus = responseStatus;
}
}package com.imooc.exception;
/**
* 统一异常拦截处理
* 可以针对异常类型进行补货处理,然后返回信息到页面
*/
@ControllerAdvice
public class GraceExceptionHandler {
final static Logger logger = LoggerFactory.getLogger(GraceExceptionHandler.class);
/**
* 只要抛出MyCustomException,就会被此方法拦截到,随后可以自定义处理
* @param e
* @return
*/
@ExceptionHandler(MyCustomException.class)
@ResponseBody
public GraceJSONResult returnMyException(MyCustomException e) {
logger.error(e.getMessage());
e.printStackTrace();
return GraceJSONResult.exception(e.getResponseStatus());
}
}// 最终只需要调用如下方法即可 GraceException.display(ResponseStatusEnum.SMS_NEED_WAIT_ERROR);
课程收获
在开发中,如果用try catch的方式,每个方法都需要单独实现,为了方便分类异常,返回给前端,采用了@ControllerAdvice注解和继承了RuntimeException的方式来实现。
通常情况下是捕获三类异常
1.业务异常:BusinessException
2.系统异常 :SystemException
3.其他异常:利用@ExceptionHandler(RuntimeException.class)去捕获
ExceptionAdvice类捕获以上三类异常,并返回自定义类型格式数据
课程截图



随时随地看视频