【Java】Response约定
老姜博客了解更多:Response約定
1 Response定義
推薦使用如下格式:
package cn.com.bestpay;public class Response<T> implements Serializable{private Boolean success;private String errorCode;private String errorMsg;private T body;// 原錯誤碼private String primaryErrorCode;// 原錯誤信息private String primaryErrorMsg;// 錯誤ipprivate String primaryErrorIp; }2 Response設值規范
2.1 success
success = true: 業務正常受理成功
success = false: 業務受理失敗情況,包括如下場景:業務數據異常(臟數據等)、配置異常、執行異常、網絡異常、數據庫異常,中間件異常以及外部異常等等.
2.2 errorCode
當success=false時設置,errorCode由各應用自己定義當前錯誤分配的錯誤碼.
建議各系統定義唯一的BusiEnum枚舉進行統一維護,示例代碼:
import lombok.Getter;public enum BusiError {REQUEST_ARGS_INVALID("00001", "請求參數無效,請重新確認后重試"),SYSTEM_CONFIG_WRONG("00002", "系統配置錯誤"),INNER_ERROR("10000", "系統內部錯誤"),RISK_ENGINE_EXECUTE_ERROR("10001", "風控決策引擎執行錯誤"),@Getterprivate String errorCode;@Getterprivate String errorMsg;BusiError(String errorCode,String errorMsg){this.errorCode = errorCode;this.errorMsg = errorMsg;} }2.3 errorMsg
當success=false時設置,同errorCode,各應用自己定義當前錯誤碼應該提示的錯誤描述
2.4 primaryError*
這塊大家要注意:primaryErrorCode、primaryErrorMsg, primaryErrorIp這三個的使用場景和目的.
場景:分布式微服務應用下,一個應用請求往往整個鏈路經過多個系統,任何環節都會出現問題,為了快速暴露出現問題的節點,設置以上三個字段用來向上傳遞最根源的問題.
目的:快速定位請求調用鏈路哪個環節出現問題
示例:
A —> B —> C —> D(發生異常)
說明:A應用是面向客戶的接口,整個請求調用鏈上經過B、C、D應用,在D應用發生驗證異常了,導致請求無法處理,報錯給前端,那錯誤碼設置流程為:
D:該應用是問題發生的最初的位置,所以對于D應用
primaryErrorCode = errorCode(D應用當前錯誤對外約定的錯誤碼) primaryErrorMsg = errorMsg(D應用當前錯誤對外約定的錯誤信息) primaryErrorIp = IPUtil.getServerIp()C: C應用拿到D應用的錯誤信息返回值后,根據自己的業務規則,設置當前異常情況下Response的errorCode, errorMsg.
但是此時 primaryErrorCode、primaryErrorMsg、primaryErrorIp的值是D的Response里面的取值
B, A: 同 C的處理一致
3 Response處理規范
調用外部服務時,對Response的處理流程如下:
Response<XXXDTO> response = yyyFacade.xxApi(request); if (response.isSuccess()) {// 請求受理成功XXXDTO data = response.getBody();//需檢查body內容是否為null,避免空指針if (data == null) {} else {} } else {//請求失敗處理 }了解更多
總結
以上是生活随笔為你收集整理的【Java】Response约定的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ospf配置小实验及安全认证
- 下一篇: 使用显卡+hashcat破解握手包