【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;// 原錯(cuò)誤碼private String primaryErrorCode;// 原錯(cuò)誤信息private String primaryErrorMsg;// 錯(cuò)誤ipprivate String primaryErrorIp; }2 Response設(shè)值規(guī)范
2.1 success
success = true: 業(yè)務(wù)正常受理成功
success = false: 業(yè)務(wù)受理失敗情況,包括如下場(chǎng)景:業(yè)務(wù)數(shù)據(jù)異常(臟數(shù)據(jù)等)、配置異常、執(zhí)行異常、網(wǎng)絡(luò)異常、數(shù)據(jù)庫(kù)異常,中間件異常以及外部異常等等.
2.2 errorCode
當(dāng)success=false時(shí)設(shè)置,errorCode由各應(yīng)用自己定義當(dāng)前錯(cuò)誤分配的錯(cuò)誤碼.
建議各系統(tǒng)定義唯一的BusiEnum枚舉進(jìn)行統(tǒng)一維護(hù),示例代碼:
import lombok.Getter;public enum BusiError {REQUEST_ARGS_INVALID("00001", "請(qǐng)求參數(shù)無(wú)效,請(qǐng)重新確認(rèn)后重試"),SYSTEM_CONFIG_WRONG("00002", "系統(tǒng)配置錯(cuò)誤"),INNER_ERROR("10000", "系統(tǒng)內(nèi)部錯(cuò)誤"),RISK_ENGINE_EXECUTE_ERROR("10001", "風(fēng)控決策引擎執(zhí)行錯(cuò)誤"),@Getterprivate String errorCode;@Getterprivate String errorMsg;BusiError(String errorCode,String errorMsg){this.errorCode = errorCode;this.errorMsg = errorMsg;} }2.3 errorMsg
當(dāng)success=false時(shí)設(shè)置,同errorCode,各應(yīng)用自己定義當(dāng)前錯(cuò)誤碼應(yīng)該提示的錯(cuò)誤描述
2.4 primaryError*
這塊大家要注意:primaryErrorCode、primaryErrorMsg, primaryErrorIp這三個(gè)的使用場(chǎng)景和目的.
場(chǎng)景:分布式微服務(wù)應(yīng)用下,一個(gè)應(yīng)用請(qǐng)求往往整個(gè)鏈路經(jīng)過(guò)多個(gè)系統(tǒng),任何環(huán)節(jié)都會(huì)出現(xiàn)問(wèn)題,為了快速暴露出現(xiàn)問(wèn)題的節(jié)點(diǎn),設(shè)置以上三個(gè)字段用來(lái)向上傳遞最根源的問(wèn)題.
目的:快速定位請(qǐng)求調(diào)用鏈路哪個(gè)環(huán)節(jié)出現(xiàn)問(wèn)題
示例:
A —> B —> C —> D(發(fā)生異常)
說(shuō)明:A應(yīng)用是面向客戶的接口,整個(gè)請(qǐng)求調(diào)用鏈上經(jīng)過(guò)B、C、D應(yīng)用,在D應(yīng)用發(fā)生驗(yàn)證異常了,導(dǎo)致請(qǐng)求無(wú)法處理,報(bào)錯(cuò)給前端,那錯(cuò)誤碼設(shè)置流程為:
D:該應(yīng)用是問(wèn)題發(fā)生的最初的位置,所以對(duì)于D應(yīng)用
primaryErrorCode = errorCode(D應(yīng)用當(dāng)前錯(cuò)誤對(duì)外約定的錯(cuò)誤碼) primaryErrorMsg = errorMsg(D應(yīng)用當(dāng)前錯(cuò)誤對(duì)外約定的錯(cuò)誤信息) primaryErrorIp = IPUtil.getServerIp()C: C應(yīng)用拿到D應(yīng)用的錯(cuò)誤信息返回值后,根據(jù)自己的業(yè)務(wù)規(guī)則,設(shè)置當(dāng)前異常情況下Response的errorCode, errorMsg.
但是此時(shí) primaryErrorCode、primaryErrorMsg、primaryErrorIp的值是D的Response里面的取值
B, A: 同 C的處理一致
3 Response處理規(guī)范
調(diào)用外部服務(wù)時(shí),對(duì)Response的處理流程如下:
Response<XXXDTO> response = yyyFacade.xxApi(request); if (response.isSuccess()) {// 請(qǐng)求受理成功XXXDTO data = response.getBody();//需檢查body內(nèi)容是否為null,避免空指針if (data == null) {} else {} } else {//請(qǐng)求失敗處理 }了解更多
總結(jié)
以上是生活随笔為你收集整理的【Java】Response约定的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ospf配置小实验及安全认证
- 下一篇: java reader类子类_Java之