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

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

  1. @Getter
  2. @ToString
  3. public enum ExceptionCodeEnum implements Assert {
  4. DIMENSION_CODE_DUPLICATE(50100, "维度code、单位code不能重复,全局唯一"),
  5. UNIT_CODE_DUPLICATE(50101, "单位code不能重复"),
  6. LESS_BASE_UNIT_ERROR(50102, "缺少一个基准单位%s"),
  7. MAX_TRY_LOGIN_ERROR(50103, "MAX_TRY_LOGIN_ERROR"), // messages.properties: MAX_TRY_LOGIN_ERROR=该账号{0}次登录失败后,被锁定{1}分钟
  8. private int code;
  9. private String msg;
  10. ExceptionCodeEnum(int code, String msg) {
  11. this.code = code;
  12. this.msg = msg;
  13. }
  14. }

使用异常

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

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

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

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