2.4.5 异常处理
2.4.5.1 异常信息格式
系统在交互中难免会有异常发生,前端为了解析异常信息向用户提示定义了异常信息的返回格式,如下:
1、返回response状态说明
状态码 | 说明 |
---|---|
200 | 成功 |
401 | 没有权限 |
500 | 程序错误(需要自定义错误体) |
2、自定义错误体
{
"errCode": "000000", "errMessage": "错误说明"
}
2.4.5.2 异常处理流程
{
"timestamp": "20**20**‐**09**‐10T10:06:19.936 +0000",
"status": 500,
"error": "Internal Server Error",
"message": "验证码错误",
"path": "/merchant/merchants/register"
}
截至目前系统并没有按照前端要求返回异常信息,测试如下: 注册商户时输入一个错误的验证码,返回信息如下:
从上边的返回信息得知,状态码为500符合要求,按前端的规范定义的错误信息要写在“errMessage” 中,显然不符合要求。
系统规范了异常处理流程,如下:
1、在服务层抛出自定义异常类型及不可预知异常类型。
上图中BusinessException为系统的自定义异常类型,程序中在代码显示抛出该异常,此类异常是程序员可预知的。
另一部分是系统无法预知的异常,如:数据库无法连接,服务器宕机等场景下所抛出的异常,此类异常是程序员无 法预知的异常。
2、应用层接收到服务层抛出异常继续向上抛出,应用层自己也可以抛出自定义异常类型及不可预知异常类型。
3、统一异常处理器捕获到异常进行解析。
判断如果为自定义异常则直接取出错误代码及错误信息,因为程序员在抛出自定义异常时已将错误代码和异常信息指定。
如果为不可预知的异常则统一定义为99999异常代码。
{ “errCode”: “000000”, “errMessage”: “错误说明” }
4、统一异常处理器将异常信息格式为前端要求的格式响应给前端。服务端统一将异常信息封装在下边的Json格式中返回。
2.4.5.3 自定义业务异常类
- 在huiminpay-common工程的com.huiminpay.cache.common.domain包下添加业务异常类BusinessException:
package com.huiminpay.common.cache.domain;
public class BusinessException extends RuntimeException {
//错误代码
private ErrorCode errorCode;
public BusinessException(ErrorCode errorCode) {
this.errorCode = errorCode;
}
public BusinessException() {
}
public void setErrorCode(ErrorCode errorCode) {
this.errorCode = errorCode;
}
public ErrorCode getErrorCode() {
return errorCode;
}
}
2、定义错误代码
在common工程专门定义了ErrorCode接口及CommonErrorCode通用代码。从资料文件夹的代码目录获取 CommonErrorCode.java类。