4.1 KiB
4.1 KiB
3. 异常
3.1. 业务异常
| 异常 | 描述 |
|---|---|
BizException |
业务异常 用户可继承 BizException 自定义业务异常。 |
» RequestParamsException |
用户请求参数错误 |
» » InvalidInputException |
用户输入内容非法 00 - DEFAULT (用户输入内容非法) 01 - CONTAINS_ILLEGAL_AND_MALICIOUS_LINKS (包含非法恶意跳转链接) 02 - CONTAINS_ILLEGAL_WORDS (包含违禁敏感词) 03 - PICTURE_CONTAINS_ILLEGAL_INFORMATION (图片包含违禁信息) 04 - INFRINGE_COPYRIGHT (文件侵犯版权) |
3.2. 系统异常
| 异常 | 描述 |
|---|---|
SysException |
系统异常(表示技术异常) 用户可继承 SysException 自定义系统异常。 |
» DataOperationResultException |
数据操作的结果不符合预期 |
» NoAvailableMacFoundException |
无法找到可访问的 Mac 地址 |
3.3. 其它异常
| 异常 | 描述 |
|---|---|
DataNotExistsException |
数据不存在异常 |
ParsingFailureException |
数据解析异常 00 - DEFAULT (解析失败) 10 - NUMBER_PARSING_FAILURE (数字转换失败) 20 - DATE_TIME_PARSING_FAILURE (时间解析失败) 30 - JSON_PARSING_FAILURE (JSON 解析失败) 40 - XML_PARSING_FAILURE (XML 解析失败) |
3.4. 多类型异常
异常在不同场景下被抛出,可以用不同的枚举值,表示不同的场景类型。
异常实现 IMultiTypesException 的 getType 方法,返回对应的场景类型。
枚举实现 IExceptionType 接口,表示不同的异常场景。也可以实现 IExceptionFactory,用于创建对应场景的异常。
public final class LoginException
extends RuntimeException
implements IMultiTypesException<LoginException.Type> {
private static final long serialVersionUID = 881293090625085616L;
private final Type type;
private LoginException(@Nonnull Type type, @Nonnull String message) {
super(message);
this.type = type;
}
private LoginException(@Nonnull Type type, @Nonnull Throwable cause) {
super(cause);
this.type = type;
}
private LoginException(@Nonnull Type type,
@Nonnull String message,
@Nonnull Throwable cause) {
super(message, cause);
this.type = type;
}
@Override
public @Nonnull Type getType() {
return this.type;
}
// ...
public enum Type implements IExceptionType<String>, IExceptionFactory<LoginException> {
DEFAULT("00", "当前会话未登录"),
NOT_TOKEN("10", "未提供token"),
INVALID_TOKEN("20", "token无效"),
TOKEN_TIMEOUT("30", "token已过期"),
BE_REPLACED("40", "token已被顶下线"),
KICK_OUT("50", "token已被踢下线"),
;
@Nonnull
private final String code;
@Nonnull
private final String defaultMessage;
Type(@Nonnull String code, @Nonnull String defaultMessage) {
this.code = code;
this.defaultMessage = defaultMessage;
}
@Override
public @Nonnull String getCode() {
return code;
}
@Override
public @Nonnull String getDefaultMessage() {
return defaultMessage;
}
@Override
public @Nonnull LoginException create() {
return new LoginException(this, this.defaultMessage);
}
@Override
public @Nonnull LoginException create(@Nonnull String message) {
return new LoginException(this, message);
}
@Override
public @Nonnull LoginException create(@Nonnull Throwable cause) {
return new LoginException(this, cause);
}
@Override
public @Nonnull LoginException create(@Nonnull String message, @Nonnull Throwable cause) {
return new LoginException(this, message, cause);
}
}
}
使用时,可以使用这种方式创建并抛出异常:
throw LoginException.Type.TOKEN_TIMEOUT.create();