如果沒有看前面幾篇文章請先看前面幾篇
SpringBoot定義優雅全域性統一Restful API 響應框架
SpringBoot定義優雅全域性統一Restful API 響應框架二
SpringBoot定義優雅全域性統一Restful API 響應框架三
目前我們好像似乎解決所有問題,達到了我們理想的效果如下
但是在業務錯誤返回時候不太理想如下
沒有必要返回 reuqest
和errorMsg
還有如果業務非常複雜的時候,會不會出現錯誤碼分配使用混亂和重複問題這個問題應該如何避免和解決呢?
這個時候我想到 使用業務錯誤常數來代替錯誤碼,這樣更加見字識意, 進一步抽象錯誤常數公共介面模組
package cn.soboys.springbootrestfulapi.common.error;
import java.util.List;
/**
* @author 公眾號 程式設計師三時
* @version 1.0
* @date 2023/5/9 20:14
* @webSite https://github.com/coder-amiao
* 定義錯誤常數 代替錯誤碼,避免業務複雜錯誤碼分配重複等問題
*/
public interface CommonErrorConstant {
/**
* 公共錯誤碼定義
*/
public static final String InvalidRequest = "InvalidRequest";
public static final String InvalidArgument = "InvalidArgument";
public static final String NotFound = "NotFound";
public static final String UnknownError = "UnknownError";
public static final String OK = "OK";
public static final String FAIL = "FAIL";
/**
* 其他自定義業務錯誤碼
*/
}
通用錯誤碼
package cn.soboys.springbootrestfulapi.common.error;
import cn.soboys.springbootrestfulapi.common.resp.ResultCode;
/**
* @author 公眾號 程式設計師三時
* @version 1.0
* @date 2023/5/2 21:36
* @webSite https://github.com/coder-amiao
*/
public enum CommonErrorCode implements ResultCode {
/**
* 錯誤請求
*/
INVALID_REQUEST(false, CommonErrorConstant.InvalidRequest, "Invalid request, for reason: "),
/**
* 引數驗證錯誤
*/
INVALID_ARGUMENT(false, CommonErrorConstant.InvalidArgument, "Validation failed for argument "),
/**
* 未找到資源
*/
NOT_FOUND(false, CommonErrorConstant.NotFound, "Resource not found."),
/**
* 未知錯誤
*/
UNKNOWN_ERROR(false, CommonErrorConstant.UnknownError, "Unknown server internal error.");
CommonErrorCode(Boolean success, String code, String message) {
this.success = success;
this.code = code;
this.message = message;
}
/**
* 響應是否成功
*/
private Boolean success;
/**
* 響應狀態碼
*/
private String code;
/**
* 響應資訊
*/
private String message;
@Override
public String getCode() {
return code;
}
@Override
public String getMessage() {
return message;
}
@Override
public boolean getSuccess() {
return success;
}
}
正常請求
錯誤請求
調整後的業務異常
調整未知錯誤異常
對應程式碼已經上傳更新github
在留一下一個思考問題,如果介面錯誤需要國際化應該如何實現?
如果你覺得對您有幫助關注公眾號,程式設計師三時 我會給大家不定期分享熱門技術,做開源專案,技術交流,面試,學習,分享自己入行多年一些感受和經驗