跳到主要内容

错误定义

错误定义一般包含错误编码和错误信息,在很多开放平台中都有对错误编码的定义。定义错误编码可以规范系统中错误信息的统一处理。错误的定义一般是针对业务异常的。如添加用户时用户手机号错误,或实名认证时实名认证不通过等。

定义错误编码的作用在于前端可以通过错误编码对某些错误做特殊处理。

错误定义

错误信息应使用枚举定义。

public interface ErrorInfo {

/**
* 获取错误编码
*
* @return 错误编码
*/
String getErrorCode();

/**
* 获取错误信息
*
* @return 错误信息
*/
String getErrorMessage();
}
java

以下是一个错误定义的具体示例

public enum PermissionError implements ErrorInfo {

/**
* 前缀4000104
*/
PERMISSION_NOT_EXIST(PermissionError.PREFIX + "01", "权限不存在"),
PERMISSION_CODE_EXIST(PermissionError.PREFIX + "02", "权限编码已存在"),
;
public static final String PREFIX = "PERM_";

@Getter
private final String errorCode;

@Getter
private final String errorMessage;

PermissionError(String errorCode, String errorMessage) {
this.errorCode = errorCode;
this.errorMessage = errorMessage;
}
}
java

其中 PermissionError.PREFIX 是错误编码的一个前缀,不同的模块应使用不同的前缀。

使用范例

在定义业务异常时可以提供一个直接传入错误信息的构造函数,在抛出异常时,就可以直接使用错误信息枚举了,如下

通用异常信息定义
通用业务异常定义
public class ServiceException extends RuntimeException {
/**
* 错误编码
*/
@Getter
private final String errorCode;

public ServiceException(String message) {
super(message);
this.errorCode = CommonError.SERVICE_ERROR.getErrorCode();
}

public ServiceException(String errorCode, String message) {
super(message);
this.errorCode = errorCode;
}

public ServiceException(String errorCode, String message, Throwable cause) {
super(message, cause);
this.errorCode = errorCode;
}

public ServiceException(ErrorInfo errorInfo) {
super(errorInfo.getErrorMessage());
this.errorCode = errorInfo.getErrorCode();
}

public ServiceException(ErrorInfo errorInfo, Throwable cause) {
super(errorInfo.getErrorMessage(), cause);
this.errorCode = errorInfo.getErrorCode();
}
}
java
throw new ServiceException(PermissionError.PERMISSION_NOT_EXIST)
java

统一定义错误信息的好处

统一定义错误信息的好处是方便管理错误信息。

  • 一个错误信息有可能在多个地方被使用,如果不加约束,可能会出现相同的错误在多个地方显示的错误信息不一致。
  • 而且当某个错误信息有误时,可以很方便的对其进行修改,并且只需修改一处即可,而无需在整个系统中找这个错误信息。