sharp-common如果优雅地异常处理

定义异常枚举类,实现接口Assert

@Getter
@ToString
public enum ExceptionCodeEnum implements Assert {
DIMENSION_CODE_DUPLICATE(50100, "维度code、单位code不能重复,全局唯一"),
UNIT_CODE_DUPLICATE(50101, "单位code不能重复"),
LESS_BASE_UNIT_ERROR(50102, "缺少一个基准单位%s"),
MAX_TRY_LOGIN_ERROR(50103, "MAX_TRY_LOGIN_ERROR"), // messages.properties: MAX_TRY_LOGIN_ERROR=该账号{0}次登录失败后,被锁定{1}分钟

private int code;
private String msg;

ExceptionCodeEnum(int code, String msg) {
this.code = code;
this.msg = msg;
}
}

使用异常

  • 数据库中不存在某个对象,抛出异常“库房不存在“
Assert.notExists("库房");
  • 参数不能为空,抛出异常“库房id不能为空“
Assert.notNull(id, "库房id");
  • 业务异常
ExceptionCodeEnum.DIMENSION_CODE_DUPLICATE.exception();
  • 参数格式化错误信息
throw new BizException(ExceptionCodeEnum.LESS_BASE_UNIT_ERROR.result(), new Object[] {"米"});

异常信息为“缺少一个基准单位米”

  • 参数国际化错误信息
throw new BizException(ExceptionCodeEnum.MAX_TRY_LOGIN_ERROR.result(), new Object[] {"0001", "10"});

异常信息为“该账号001次登录失败后,被锁定10分钟”