文章目录
- 1. 系统异常类
 - 2. 异常码
 - 3. 统一异常处理
 - 4. 响应体
 - 5. 响应码
 
1. 系统异常类
public class AiException extends RuntimeException {
    @Getter
    private String errorCode;
    @Getter
    private String errorDesc;
    public AiException (String errorCode, String errorDesc) {
        super(errorCode);
        this.errorCode = errorCode;
        this.errorDesc = errorDesc;
    }
    public AiException (ExceptionEnum ex, Object... args) {
        super(ex.getErrorCode());
        this.errorCode = ex.getErrorCode();
        this.errorDesc = String.format(ex.getErrorDesc(), args);
    }
}
2. 异常码
public enum ExceptionEnum {
    /* 数据库操作类异常 */
    /** 写入时异常 */
    DB_INSERT_EXCEPTION("DB1001", "table[%s] reasons[%s]"),
    /** 更新时异常 */
    DB_UPDATE_EXCEPTION("DB2001", "table[%s] reasons[%s]"),
    /** 删除时异常 */
    DB_DELETE_EXCEPTION("DB3001", "table[%s] reasons[%s]"),
    /** 查询时异常 */
    DB_SELECT_EXCEPTION("DB4001", "table[%s] reasons[%s]"),
    /* 业务类异常 */
    ;
    /**
     * 错误码
     * */
    @Getter
    private String errorCode;
    /**
     * 错误描述
     * */
    @Getter
    private String errorDesc;
    ExceptionEnum(String errorCode, String errorDesc) {
        this.errorCode = errorCode;
        this.errorDesc = errorDesc;
    }
}
3. 统一异常处理
@ControllerAdvice
@Slf4j
public class ExceptionHandler {
@ExceptionHandler(AiException.class)
@ResponseBody
public AiResponse exceptionHandler(AiException ex) {
log.error("errorCode[{}] errorDesc[{}]", ex.getErrorCode(), ex.getErrorDesc());
return AiResponse.failed(ex.getErrorDesc());
}
@ExceptionHandler(Exception.class)
@ResponseBody
public AiResponse exceptionHandler(Exception ex) {
log.error("exception message[{}]", ex.getMessage());
return AiResponse.failed(ex.getMessage());
}
}
4. 响应体
@Data
public class AiResponse<T> {
/**
* 响应码
* */
private String code;
/**
* 详细描述
* */
private String desc;
/**
* 响应数据
* */
private T data;
private AiResponse(ResponseEnum responseEnum, T data) {
this.code = responseEnum.code();
this.desc = responseEnum.desc();
this.data = data;
}
public static <T> AiResponse success(T data) {
return new AiResponse<>(ResponseEnum.SUCCESS, data);
}
public static <T> AiResponse failed(T data) {
return new AiResponse<>(ResponseEnum.FAILED, data);
}
public static <T> AiResponse failed(ResponseEnum responseEnum, T data) {
return new AiResponse<>(responseEnum, data);
}
}
5. 响应码
public enum ResponseEnum {
    /** success */
    SUCCESS("0000", "success"),
    /** failed */
    FAILED("0001", "failed")
    ;
    ResponseEnum(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }
    private String code;
    private String desc;
    public String code() {
        return code;
    }
    public String desc() {
        return desc;
    }
}                









