java接口入參模板化,適用於企業化服務遠程調度模板化的場景,接口入參實現高度可配置化


需求:遠程服務接口模板化配置提供接入服務

 

模板接口分為三個模塊:功能路由、參數校驗、模板入庫

路由:這里的實現方式很簡單,就是根據業務標識找到對應的處理方法

參數校驗:

    參數校驗這步涉及模板和校驗類兩個核心模塊

    提供一個表設計:

CREATE TABLE `account_template_validation` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`city_no` VARCHAR(50) NOT NULL COMMENT '城市編碼',
`template_id` VARCHAR(64) NOT NULL COMMENT '模板id',
`properties` VARCHAR(4000) NOT NULL COMMENT '模板',
`isReturn` VARCHAR(10) NOT NULL COMMENT '是否要跳轉',
`create_time` DATETIME DEFAULT NULL COMMENT '創建時間',
`update_time` DATETIME DEFAULT NULL COMMENT '更新時間',
PRIMARY KEY (`id`),
INDEX `cityNo` (`city_no`),
INDEX `templateId` (`template_id`)
) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

模板表模板的值需要用到json格式的報文:

{
"A": {
"notNull": "false",
"length": "15",
"toFiled": "B"
},
"A": {
"notNull": "false",
"length": "15",
"toFiled": "C"
},
"gmt_time": {
"notNull": "false",
"length": "15",
"toFiled": "gmtTime",
"formate": "((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229))([0-1][0-9]|2[0-3])([0-5][0-9])([0-5][0-9])$"
}
}

模板的報文是包含入參字段配置的屬性

核心校驗類:

public static void main(String[] args) {
        JSONObject template = JSON.parseObject("{\"si_type\":{\"notNull\":\"true\",\"length\":\"32\",\"toFiled\":\"siType\"},\"account_balance\":{\"notNull\":\"false\",\"length\":\"15\",\"toFiled\":\"accountBalance\"},\"pay_cost_base\":{\"notNull\":\"false\",\"length\":\"15\",\"toFiled\":\"payCostBase\"},\"pay_cost_month\":{\"notNull\":\"true\",\"length\":\"6\",\"toFiled\":\"payCostMonth\"},\"pay_cost_total\":{\"notNull\":\"false\",\"length\":\"15\",\"toFiled\":\"payCostTotal\"},\"pay_cost_person\":{\"notNull\":\"false\",\"length\":\"15\",\"toFiled\":\"payCostPerson\"},\"pay_cost_unit\":{\"notNull\":\"false\",\"length\":\"15\",\"toFiled\":\"payCostUnit\"},\"account_person\":{\"notNull\":\"false\",\"length\":\"15\",\"toFiled\":\"accountPerson\"},\"extend_params_test1\":{\"notNull\":\"false\",\"length\":\"15\",\"toFiled\":\"extend_params\"},\"extend_params_test2\":{\"notNull\":\"false\",\"length\":\"15\",\"toFiled\":\"extend_params\"}}");
        JSONObject sourceObject = JSON.parseObject("{\"biz_type\":\"si_payment_incomeS\",\"city_code\":\"330100\",\"sys_service_provider_id\":\"2088101010464092\",\"si_data\":[{\"target_idcard_type\":\"01\",\"request_id\":\"201901311817129355\",\"target_idcard\":\"4453231994089898631\",\"target_user_name\":\"張三\",\"target_user_id\":\"2088102122001010\",\"target_sicard_no\":\"M40000240\",\"target_extend_params\":\"{}\",\"mobile\":\"18100000000\",\"template_id\":\"XS_si_payment_income_template\",\"template_version\":\"1.0\",\"template_data\":[{\"account_balance\":\"0\",\"account_person\":\"40\",\"pay_cost_month\":\"195504\",\"pay_cost_base\":\"2500\",\"pay_cost_total\":\"195\",\"pay_cost_person\":\"195\",\"pay_cost_unit\":\"1955\",\"extend_params\":\"{}\",\"si_type\":\"10\"},{\"account_balance\":\"0\",\"account_person\":\"40\",\"pay_cost_month\":\"195504\",\"pay_cost_base\":\"2500\",\"pay_cost_total\":\"195\",\"pay_cost_person\":\"195\",\"pay_cost_unit\":\"1955\",\"extend_params\":\"{}\",\"si_type\":\"20\"},{\"account_balance\":\"0\",\"account_person\":\"40\",\"pay_cost_month\":\"195504\",\"pay_cost_base\":\"2500\",\"pay_cost_total\":\"195\",\"pay_cost_person\":\"195\",\"pay_cost_unit\":\"1955\",\"extend_params\":\"{}\",\"si_type\":\"30\"},{\"account_balance\":\"0\",\"account_person\":\"40\",\"pay_cost_month\":\"195504\",\"pay_cost_base\":\"2500\",\"pay_cost_total\":\"195\",\"pay_cost_person\":\"195\",\"pay_cost_unit\":\"1955\",\"extend_params\":\"{}\",\"si_type\":\"40\"}],\"service_return_url\":\"https://www.alipay.com\"}],\"extend_params\":\"{}\",\"target_notify_time\":\"20181226151421\"}");
        
        *//**
          * 開始校驗數據
          * 需要校驗數據的長度,是否必傳,是否滿足正則表達式規則.
          *//*
            String siArry = sourceObject.getString("si_data");
            JSONArray siarr = JSON.parseArray(siArry);
            for (Object object : siarr) {
             String siData = object == null ? "" : String.valueOf(object);
             JSONObject siObject = JSON.parseObject(siData);
             String tempdataArry = siObject.getString("template_data");
             JSONArray tempdataarr = JSON.parseArray(tempdataArry);
             for (Object object2 : tempdataarr) {
                 String tempData = object2 == null ? "" : String.valueOf(object2);
                 JSONObject tempObject = JSON.parseObject(tempData);
                 Set<Entry<String, Object>> entrySet = tempObject.entrySet();
                 for (Entry<String, Object> entry : entrySet) {
                     String key = entry.getKey();
                     Object value = entry.getValue();
                     System.out.println(key+"---------"+value);
                     TemplateValidate templateValidator = JSON.parseObject((String) template.getString(key), TemplateValidate.class);
                     System.out.println(templateValidator);
                     //判斷是否為空
                     if ("true".equals(templateValidator.getNotNull())) {
                         if (value == null) {
                             System.out.println("{0},校驗失敗!不能為null!");
                             LoggerUtil.info(logger, "{0},校驗失敗!不能為null!", key);
            
                         } else if (StringUtil.isBlank(String.valueOf(value))) {
                             System.out.println("{0},校驗失敗!不能為null!");
                             LoggerUtil.info(logger, "{0},校驗失敗!不能為null!", key);
            
                         }
                     }
                     //判斷長度是否超過規定值
                     Integer length = Integer.parseInt(templateValidator.getLength());
                     if (((String) value).length() > length) {
                         System.out.println("{0},校驗失敗!長度超長!");
                         LoggerUtil.info(logger, "{0},校驗失敗!長度超長!", key);
                     }
                     //判斷格式是否正確
                     if (StringUtil.isNotBlank(templateValidator.getFormate())) {
                         if (!Pattern.matches(templateValidator.getFormate(), String.valueOf(value))) {
                             LoggerUtil.info(logger, "{0},校驗失敗!格式不匹配!", key);
                         }
                     }
                 }
             }
            
            }
            }

class TemplateValidate {
private String toFiled;

 
         

private String notNull;

 
         

private String length;

 
         

private String formate;

 
         

public String getToFiled() {
return toFiled;
}

 
         

public void setToFiled(String toFiled) {
this.toFiled = toFiled;
}

 
         

public String getNotNull() {
return notNull;
}

 
         

public void setNotNull(String notNull) {
this.notNull = notNull;
}

 
         

public String getLength() {
return length;
}

 
         

public void setLength(String length) {
this.length = length;
}

 
         

public String getFormate() {
return formate;
}

 
         

public void setFormate(String formate) {
this.formate = formate;
}

}

 

 

    模板參數組裝:

public static void main(String[] args) {
    
        JSONObject template = JSON.parseObject(
                "{\"si_type\":{\"notNull\":\"true\",\"length\":\"32\",\"toFiled\":\"si_type\",\"formate\":\"[12345]0\"},\"account_balance\":{\"notNull\":\"false\",\"length\":\"15\",\"toFiled\":\"account_balance\"},\"pay_cost_base\":{\"notNull\":\"false\",\"length\":\"15\",\"toFiled\":\"pay_cost_base\"},\"month\":{\"notNull\":\"true\",\"length\":\"6\",\"toFiled\":\"pay_cost_month\",\"formate\":\"(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})((0[13578]|1[02])|(0[469]|11)|02))\"},\"pay_cost_total\":{\"notNull\":\"false\",\"length\":\"15\",\"toFiled\":\"pay_cost_total\"},\"pay_cost_person\":{\"notNull\":\"false\",\"length\":\"15\",\"toFiled\":\"pay_cost_person\"},\"pay_cost_unit\":{\"notNull\":\"false\",\"length\":\"15\",\"toFiled\":\"pay_cost_unit\"},\"account_person\":{\"notNull\":\"false\",\"length\":\"15\",\"toFiled\":\"account_person\"},\"extend_params\":{\"notNull\":\"false\",\"length\":\"15\",\"toFiled\":\"extend_params\"}}");
        JSONObject sourceObject = JSON.parseObject(
                "{\"biz_type\":\"si_payment_incomeS\",\"city_code\":\"330100\",\"sys_service_provider_id\":\"2088101010464092\",\"si_data\":[{\"target_idcard_type\":\"01\",\"request_id\":\"201902011759182132\",\"target_idcard\":\"445323199404211217\",\"target_user_name\":\"張三\",\"target_user_id\":\"2088102122001010\",\"target_sicard_no\":\"M40000240\",\"target_extend_params\":\"{}\",\"mobile\":\"18100000000\",\"template_id\":\"XS_si_payment_income_template\",\"template_version\":\"1.0\",\"template_data\":[{\"account_balance\":\"0\",\"account_person\":\"50\",\"month\":\"201902\",\"pay_cost_base\":\"2500\",\"pay_cost_total\":\"195\",\"pay_cost_person\":\"195\",\"pay_cost_unit\":\"1955\",\"extend_params\":\"{}\",\"si_type\":\"10\"},{\"account_balance\":\"0\",\"account_person\":\"40\",\"month\":\"201902\",\"pay_cost_base\":\"2500\",\"pay_cost_total\":\"195\",\"pay_cost_person\":\"195\",\"pay_cost_unit\":\"1955\",\"extend_params\":\"{}\",\"si_type\":\"20\"},{\"account_balance\":\"0\",\"account_person\":\"40\",\"month\":\"201902\",\"pay_cost_base\":\"2500\",\"pay_cost_total\":\"195\",\"pay_cost_person\":\"195\",\"pay_cost_unit\":\"1955\",\"extend_params\":\"{}\",\"si_type\":\"30\"},{\"account_balance\":\"0\",\"account_person\":\"40\",\"month\":\"201902\",\"pay_cost_base\":\"2500\",\"pay_cost_total\":\"195\",\"pay_cost_person\":\"195\",\"pay_cost_unit\":\"1955\",\"extend_params\":\"{}\",\"si_type\":\"40\"}],\"service_return_url\":\"https://www.alipay.com\"}],\"extend_params\":\"{}\",\"target_notify_time\":\"20181226151421\"}");
    
        String siArry = sourceObject.getString("si_data");
        sourceObject.remove("si_data");
        JSONArray siarr = JSON.parseArray(siArry);
        JSONArray toSiArr=new JSONArray();
        for (Object object : siarr) {
            String siData = object == null ? "" : String.valueOf(object);
            JSONObject siObject = JSON.parseObject(siData);
            String tempdataArry = siObject.getString("template_data");
            JSONArray tempdataarr = JSON.parseArray(tempdataArry);
            JSONArray totempdataarr = new JSONArray();
            for (Object objecttemp : tempdataarr) {
                String tempData = objecttemp == null ? "" : String.valueOf(objecttemp);
                JSONObject tempObject = JSON.parseObject(tempData);
                JSONObject toObject = new JSONObject();
                Set<Entry<String, Object>> entrySet = tempObject.entrySet();
                for (Entry<String, Object> entry : entrySet) {
                    String key = entry.getKey();
                    Object value = entry.getValue();
                    TemplateValidate templateValidator = JSON.parseObject((String) template.getString(key), TemplateValidate.class);
    
                    if ("extend_params".equals(templateValidator.getToFiled())) {
                        toObject.put(
                                "extendParams",
                                (toObject.getString("extendParams") == null ? "" : toObject.getString("extendParams")) + "{\"" + key + "\":\"" + value
                                        + "\"}");
                    }
                    toObject.put(templateValidator.getToFiled(), value);
                }
                totempdataarr.add(toObject);
            }
            siObject.remove("template_data");
            siObject.put("template_data", totempdataarr);
            toSiArr.add(siObject);
    
        }
        sourceObject.put("si_data", toSiArr);

        SiAccountIncomeRequestBodyVO requestVO = JSON.toJavaObject(sourceObject, SiAccountIncomeRequestBodyVO.class);
        System.out.println(requestVO);
        handel(requestVO);//處理業務,后續落庫 
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM