异常处理
# 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不在当前期间,不可编辑。");
public final static ErrorCode nextPeriodNotSetted = create("nextPeriodNotSetted", "下一期间%s未设置。");
//TODO ....开发在此添加其它错误码定义
}
```
***异常用法示例***
```java
// 1. 抛业务异常
if (!isInCurrentPeriod) {
throw new KDException(FIGLErrorCode.voucherNotInCurrentPeriod, voucherNumber);
}
// 2. catch业务异常。业务异常,是指业务逻辑校验抛出的异常。仅catch要关注的异常。
try {
callMyBizMethod();
} catch (KDException e) {
// 在这里处理你关注的异常
ErrorCode errorCode = e.getErrorCode();
if (FIGLErrorCode.voucherNotInCurrentPeriod.equals(errorCode)) {
// 在这里处理你的业务:异常收尾处理
// ...
}
// 放过不关注的
throw e;
}
// 3. catch所有异常。业务异常外,其他异常统称为系统异常,如ConnectException、TimeoutException等。系统异常有两种处理方式:1. 不理会,让其往上抛异常,由外层调用处理。2. 封装为业务异常,再往上抛,如下例。
try {
doMyJob();
} catch (KDException e) {
// 业务异常,往上抛。
throw e;
} catch(Exception e){
// 封装系统异常为业务异常
throw new KDException(e, FIGLErrorCode.doMyJobFailed, "jobname", e.getMessage());
}
```
异常处理
# 1 简介苍穹平台提供了统一的异常处理规范。并针对异常处理提供如下的规范:1. 统一使用KDException,可自定义子异常。2. 只catch需要...
点击下载文档
本文2024-09-23 00:27:54发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-139631.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章