
# 1 简介
苍穹平台提供了统一的异常处理规范。并针对异常处理提供如下的规范:
1. 统一使用KDException,可自定义子异常。
2. 只catch需要处理的异常,其它放过 (任其往上抛)。
+ catch异常后,再往上抛出异常,通常不需要记录日志。
+ catch异常后,未往上抛出异常,务必记录日志。
3. UI显示的异常信息,应是业务语义,让用户知道下一步该怎么处理。
# 2 应用场景
需要异常处理的任何场景。
# 3 接口说明
异常相关接口定义和实现存在于bos-exception-1.0.jar中。
## 3.1 接口列表
***KDException***
| 方法 | 说明 |
| - | - |
| KDException | 异常构造方法 |
> 苍穹所有异常均为KDException或继承自KDException。
***ErrorCode***
| 方法 | 说明 |
| - | - |
| ErrorCode | 错误码构造方法 |
> 错误码是全局唯一的,用于定位错误和反馈提示信息,包含错误代码和提示信息。
## 3.2 接口详情
### ErrorCode
+ **功能描述**
构造全局唯一错误码。
+ **方法**
```java
public ErrorCode(String errorCode, String message)
```
+ **参数说明**
| 参数 | 类型 | 说明 |
| - | - | - |
| errorCode | String | 错误代码,产品全局唯一。格式:产品云.应用.错误码,产品云、应用均为小写,错误码与java变量名同(驼峰式)。|
| message | String | 默认的错误信息,可用%s模版参数(参见String.format),在抛KDException时传入值(args)。 |
## 3.3 代码示例
每个应用应统一定义异常,如FIGLErrorCode:
```java
final static ErrorCode voucherNotInCurrentPeriod = new ErrorCode("fi.gl.voucherNotInCurrentPeriod", "凭证%s不在当前期间,不可编辑。");
```
fi.gl.voucherNotInCurrentPeriod为错误代码,其错误信息是多语言的,由多语言资源进行配置。例如:
1. 中文:fi.gl.voucherNotInCurrentPeriod=凭证%s不在当前期间,不可编辑。
2. 英文:fi.gl.voucherNotInCurrentPeriod=The voucher %s cannot be modified because it is not in the current period.
***应用错误码类定义示范***
```java
public class FIGLErrorCode {
private static ErrorCode create(String code, String message) {
return new ErrorCode("fi.gl." + code, message);
}
public final static ErrorCode voucherNotInCurrentPeriod = create("voucherNotInCurrentPeriod", "凭证%s不在当前期间,不可编辑。"