入參映射param_mapping

入參映射是(shì)針對當接入參數與實際路由服務所需參數名稱不(bù)匹配、或缺失參數值等,用來(lái)轉換接入和(hé / huò)接出(chū)參數和(hé / huò)添加默認參數。 映射後得到(dào)的(de)報文被作爲(wéi / wèi)新的(de)報文體轉發給對應的(de)服務。 參數映射按功能分爲(wéi / wèi)兩大(dà)部分:

  • 對整體報文做映射 mapping字段用于(yú)對報文做整體映射 要(yào / yāo)注意的(de)是(shì)一(yī / yì /yí)旦配置了(le/liǎo)mapping字段, 則隻保留在(zài)mapping中配置的(de)字段 适用于(yú)報文的(de)層級轉換, 大(dà)量的(de)字段需要(yào / yāo)重組等 另要(yào / yāo)注意在(zài)mapping重組過程中, 獲取的(de)值可以(yǐ)來(lái)自報文體和(hé / huò)上(shàng)下文
  • 對單個(gè)字段做操作 operation字段用于(yú)對報文做單個(gè)字段的(de)處理 相比參數映射更加靈活和(hé / huò)有針對性, 可以(yǐ)對字段做任何特殊處理 在(zài)某些場景中隻需要(yào / yāo)對某個(gè)報文的(de)一(yī / yì /yí)個(gè)或幾個(gè)字段做處理, 則可以(yǐ)不(bù)使用mapping 支持自定義擴展operation, 自定義擴展時(shí), 需要(yào / yāo)将 type設置爲(wéi / wèi)custom, functionType爲(wéi / wèi)spi标識 兩種功能可以(yǐ)分開也(yě)可以(yǐ)結合使用,如果同時(shí)配置了(le/liǎo)兩種功能則先執行mapping, 再執行operation.另支持對指定operation做特殊配置, 達到(dào)在(zài)mapping前執行的(de)目的(de)。

例如有如下報文需要(yào / yāo)做參數映射:

{
    "loanNo":"1501752227749",
    "pageNo":"1",
    "cooprProdCd":"5",
    "txTm":"5650",
    "receiveMg": {
        "acctBch":"636","bussBch":"2128","chnlTxNo":"63","cooprNo":"123456"
    },
    "applyNo": [{"eacNo":666666, chnlTxNo:888888}, {"eacNo":11111, chnlTxNo: 22222}], 
    "tranEndDt":"2017-10-10","tranStartDt":"20170101", 
    "transCode":"RESS_QM10015", 
    "respDesc": "查詢實賬戶餘額信息成功"
}

有如下需求:

  • 去掉 (receiveMg), 使"receiveMg"下面的(de)數據合并到(dào)最外層, 并删除其中的(de)(cooprNo),
  • 增加字段(bizContent.bchCde), 值爲(wéi / wèi) 2020
  • 增加一(yī / yì /yí)個(gè)固定字段(pathNo), 值爲(wéi / wèi)" "
  • 删除字段 (cooprProdCd)
  • 修改 (tranEndDt) 字段的(de)日志格式
  • 增加當前時(shí)間 (curDt) 字段, 按照指定的(de)日期格式
  • 将 (tranStartDt) 字段的(de)值映射到(dào)字段 (tranStartDttttt)
  • 根據上(shàng)下文修改 (txTm)字段的(de)值
  • 校驗 (loanNo) 字段是(shì)否爲(wéi / wèi)空
  • 單獨獲取(applyNo)中第二個(gè)對象的(de)(eacNo) 值以(yǐ)新的(de)key (lalala.eacNumber)放入報文體中
  • 将applyNo字段和(hé / huò)值都映射, 映射爲(wéi / wèi) "applyNooooo": [{"eacccccNo":666666, chnlTxxxxxNo:888888}, {"eacccccNo":11111, chnlTxxxxxNo: 22222}],
  • 組裝一(yī / yì /yí)個(gè)新的(de)字段(feeAmount), 值來(lái)源于(yú)transCode和(hé / huò)respDesc, 值最終要(yào / yāo)組裝成 transCode + respDesc

組裝後的(de)報文爲(wéi / wèi):

{
"loanNo":"1501752227749","pageNo":"1","cooprProdCd":"5","txTm":"5650","receiveMg":     
    {
        "acctBch":"636","bussBch":"2128","chnlTxNo":"63","cooprNo":"123456"
    },
"applyNo": [{"eacNo":666666, "chnlTxNo":888888}, {"eacNo":11111, "chnlTxNo": 22222}], 
"tranEndDt":"2017-10-10","tranStartDt":"20170101", 
"transCode":"RESS_QM10015", 
"respDesc": "查詢實賬戶餘額信息成功",
}

配置如下:

 param_mapping:
   available: true
   matcher: '${localPort}->5080'      #隻有handler級别的(de)matcher先通過匹配,後面的(de)controller才能生效
   values:
   - available: true
     id: ttt
     matcher: '${localPort}->5080'
     mapping:
       loanNo: 'loanNo'
       pageNo: 'pageNo'
       txTm: 'txTm'
       #pageNumber: 'pageNumber'              #對應----4 ,這(zhè)個(gè)字段現在(zài)是(shì)注釋掉的(de),不(bù)生效, 當然不(bù)配置也(yě)可以(yǐ), 重組後的(de)報文都不(bù)會包含這(zhè)個(gè)字段
       acctBch: 'receiveMg.acctBch'           #對應----1   
       bussBch: '2128'
       chnlTxNo: 'chnlTxNo'
       transCode: 'transCode'
       respDesc: 'respDesc'
       pathNo: ''                             #對應----3   
       bizContent.bchCde: '{<2020>}'          #對應----2
       tranEndDt: 'tranEndDt'
       tranStartDttttt: 'tranStartDt'         #對應----7
       lalala.eacNumber: 'applyNo[2].eacNo'   #對應----10

       applyNooooo[*].eacccccNo: 'applyNo[*].eacNo'         #對應----11
       applyNooooo[*].chnlTxxxxxNo: 'applyNo[*].chnlTxNo'   #對應----11

     operations:
     - {type: modify, key: tranEndDt, functionType: groovy, expression: 'value.replace("-", "")'}       #對應----5
     - {type: add, key: curDt, functionType: date, expression: 'yyyyMMddHHmmss'}                        #對應----6

     #對應----8  代表操作: 從上(shàng)下文或報文體中獲取aaa對應的(de)值, 賦予txTm.另外利用mapping也(yě)可以(yǐ)達到(dào)同樣效果, 比如在(zài)mapping中配置txTm: 'aaa'
     - {type: modify, key: txTm, functionType: default, expression: '${aaa}'}    

     - {type: verify, key: loanNo, functionType: required, expression: null}                             #對應----9

     #下面groovy操作時(shí)會從上(shàng)下文獲取 feeAmount 字段對應的(de)值, 連同報文體都傳給groovy腳本, feeAmount 字段對應的(de)值對應的(de)key爲(wéi / wèi) 'value'
     - {type: add, key: feeAmount, functionType: groovy, expression: 'transCode + respDesc'}            #對應----12
 注意事項
 對于(yú)要(yào / yāo)映射嵌套list的(de)情況配置方式例如: bOrgIdList[*].functionListA[*].aaa: 'applyNo[*].eacNo.sceneTypeList[*].bbb', 
 需要(yào / yāo)注意的(de)是(shì)要(yào / yāo)保證兩邊[*]的(de)數量一(yī / yì /yí)緻, 
 另外對于(yú)某些特定場景如向List每個(gè)對象中添加固定字段, 配置例如: reply.returnCode[*].d[*].q: '{<8888>}', 
 該配置将會将所有對象的(de)q字段的(de)值替換爲(wéi / wèi)8888.
 也(yě)可以(yǐ)隻映射list對象而(ér)非list中每個(gè)對象的(de)字段,如 bOrgIdList[*].functionListA[*]: 'applyNo[*].eacNo.sceneTypeList[*]', 
 或者bOrgIdList[*].functionListA: 'applyNo[*].eacNo.sceneTypeList'

出(chū)參映射outparam_mapping

功能和(hé / huò)配置與入參映射一(yī / yì /yí)緻, 區别是(shì)入參映射在(zài)請求進入網關後對報文做處理, 出(chū)參映射時(shí)在(zài)服務端響應到(dào)網關後 , 對響應報文做處理

outparam_mapping:
  available: true
  matcher: '${pathNo}->1285 && ${nlinkService}->IPAYTOCOCAndPFfillNLINK && ${TrxCtgy}->0113 && ${RPFlg}->2'
  skipWhenExceptionOccur: false
  clearPayloadWhenExceptionOccur: true
  values:

- id: outparam_mapping_epcc_RZZFSK_IPAYTOCOCAndPFfillNLINK
  available: true
  mapping: !!omap
  - root.MsgBody.SysRtnInf.SysRtnCd: 'sysRtnCd'
  - root.MsgBody.SysRtnInf.SysRtnDesc: 'sysRtnMsg'
  - root.MsgBody.SysRtnInf.SysRtnTm: 'respTime'
  - root.MsgBody.BizInf.RPFlg: 'orgReqRoot.MsgBody.TrxInf.RPFlg'
  - root.MsgBody.BizInf.TrxStatus: 'status'
  - root.MsgBody.BizInf.TrxFinishTm: 'respTime'
  - root.MsgBody.BizInf.BatchId: 'orgReqRoot.MsgBody.TrxInf.BatchId'
  - root.MsgBody.BizInf.CdtrBankId: 'payeeSeq'
  - root.MsgBody.BizInf.BizStsCd: 'respCode'
  - root.MsgBody.BizInf.BizStsDesc: 'respMsg'
  - root.MsgBody.BizInf.TrxCtgy: 'orgReqRoot.MsgBody.TrxInf.TrxCtgy'
  - root.MsgBody.BizInf.TrxId: 'orgReqRoot.MsgBody.TrxInf.TrxId'
  - root.MsgBody.BizInf.TrxAmt: 'orgReqRoot.MsgBody.TrxInf.TrxAmt'
  - root.TrxIdTemp: 'orgReqRoot.MsgBody.TrxInf.TrxId'
    operations:
  - {type: custom, key: root.MsgBody.SysRtnInf.SysRtnTm, functionType: iso_datetime, expression: 'NOW_IF_EMPTY'}
  - {type: custom, key: root.MsgBody.BizInf.TrxFinishTm, functionType: iso_datetime, expression: 'NOW_IF_EMPTY'}
  - {type: custom, matcher: '${Epcc_Is_Success_Return}->0 && ${root.MsgBody.BizInf.BizStsCd}->null', key: root.MsgBody.BizInf.BizStsCd, functionType: groovy, expression: '"00000000"'}
  - {type: custom, matcher: '${Epcc_Is_Success_Return}->0 && ${root.MsgBody.BizInf.BizStsDesc}->null', key: root.MsgBody.BizInf.BizStsDesc, functionType: groovy, expression: '"交易成功"'}
  - {type: modify, matcher: '${Epcc_Is_Success_Return}->0 && ${root.MsgBody.BizInf.CdtrBankId}->null', key: root.MsgBody.BizInf.CdtrBankId, functionType: default, expression: 'root.TrxIdTemp'}
Copyright © 屯昌單支科技有限公司 2019 all right reserved,powered by Gitbook聯系方式: wanglihang@mskj.com
修訂時(shí)間: 2019-09-03 17:48:17

results matching ""

    No results matching ""