2017-05-09 119 views
0

嗨我想創建一個休息響應使用post方法,我想動態傳遞變量而不是硬編碼,但是我失敗的地方是,當我試圖使用post方法(例如array [「CN = XXX_XX,OU = XXXXX,OU = 1_XXXX XXXXity Groups,DC = XXXX,DC = local」])將數組作爲參數發送到Rest Web服務,我知道存在一個更好的方法來做到這一點請找到我的代碼示例。這是給我一個合適的結果的方法。 第一種方法:(工程) `使用Post方法設置其餘Web服務的setRequestBody

try { 
      var r = new sn_ws.RESTMessageV2('SailPoint_IdM', 'post'); 
      var txt = "{\r\n\t\"workflowArgs\":\r\n\t{\r\n\t\"identityName\":\"SiamR\",\r\n\t\"appName\":\"Active Directory\",\r\n\t\"listEntitlements\":[\"CN=ER_CxxxK,OU=xxxxx,OU=1_xxxxxx Security xxx,DC=xxxx,DC=local\"],\r\n\t\"operation\":\"Add\",\r\n\t\"ticketNumber\":\"RITM1234567\"\r\n\t}\r\n}"; 
    r.setRequestBody(txt); 
    var response = r.execute(); 
    var ResponseBody = response.getBody(); 
    var HTTPCode = response.getStatusCode(); 
    gs.log(ResponseBody); 
    gs.log(HTTPCode); 

} catch (ex) { 
    var message = ex.getMessage(); 
} 

輸出:

Script: {"attributes":{"requestResult":{"status":"Success"}},"complete":false,"errors":null,"failure":false,"metaData":null,"requestID":"2c988d8c5bd47cf7015bebfb64cf01e6","retry":false,"retryWait":0,"status":null,"success":false,"warnings":null} 
Script: 200 

2n個方法(不工作):

try { 
var r = new sn_ws.RESTMessageV2('SailPoint_IdM', 'post'); 
r.setStringParameter('"listEntitlements"', '["CN=Exxx_xxxK,OU=xxxxion,OU=1_xxxxx Security xxxx,DC=xxx,DC=xxxx"]'); 
r.setStringParameter('"identityName"', '"SiarmR"'); 
r.setStringParameter('"appName"', '"Active Directory"'); 
r.setStringParameter('"ticketNumber"', '"RITM1234567"'); 
r.setStringParameter('operation', '"Add"'); 

//override authentication profile 
//authentication type ='basic'/ 'oauth2' 
//r.setAuthentication(authentication type, profile name); 

var response = r.execute(); 
var responseBody = response.getBody(); 
var httpStatus = response.getStatusCode(); 
gs.log(responseBody); 
} 
catch(ex) { 
var message = ex.getMessage(); 
} 

輸出:

Script: {"attributes":{"requestResult":{"errors":["An unexpected error occurred: sailpoint.tools.GeneralException: The application script threw an exception: java.lang.NullPointerException: Null Pointer in Method Invocation BSF info: script at line: 0 column: columnNo"],"status":"FAIL","GroupStatus":null,"AppStatus":null}},"complete":false,"errors":["Status : failed\nAn unexpected error occurred: sailpoint.tools.GeneralException: The application script threw an exception: java.lang.NullPointerException: Null Pointer in Method Invocation BSF info: script at line: 0 column: columnNo\n"],"failure":false,"metaData":null,"requestID":null,"retry":false,"retryWait":0,"status":null,"success":false,"warnings":null} 

Script: 200 

林facin摹問題與此參數作爲即時通訊試圖通過以此爲阿雷paramenter「["CN=Exxx_xxxK,OU=xxxxion,OU=1_xxxxx Security xxxx,DC=xxx,DC=xxxx"]

請建議的方式來實現這一點,並通過動態的,如果提示第一種方法

回答

0

下面是我的功能之一的所有變量,處理請求端點(url),標題或正文中出現的動態參數;

對於如:參數p

var p = {abc: 'def'}; 

和outbuond其餘設置:

rest url = https://xxxx.sss.com/api/showme?name=${abc} 
rest headers name = custom-header; value = ${abc} 
rest body = {name: "${abc}"} 

所以它將替換所有$ {}農行以 '高清'

_.isNullOrEmpty - check is obj, string or array is null or empty; 
_.loop - loop an obj or array, pass in function(nm/i, val) {} 
_.isArray - to check if is array 
_.str - convert anything to string 
_.rpl - replace all string A to B 

restParameters: function (restRequest, obj, endpoint) { 
    var _ = this; 
    if ((_.isNullOrEmpty(restRequest)) || (_.isNullOrEmpty(obj))) return; 
    if (_.isNullOrEmpty(endpoint)) endpoint = restRequest.getEndpoint(); 
    var body = restRequest.getRequestBody(); 
    var headers = restRequest.getRequestHeaders(); 
    _.loop(obj, function(nm, val) { 
     if (_.isArray(val)) { 
      val = (_.isNullOrEmpty(val)) ? '[]' : JSON.stringify(val); 
     } else val = _.str(val); 
     //for my case my array pass in as string become: "[\"1\", \"2\"]" 
     //comment below if pass in as object 
     if (val.contains('"')) val = _.rpl(val, '"', '\\"'); 

     restRequest.setStringParameterNoEscape(nm, val); 
     var sch = '${' + nm + '}'; 
     endpoint = _.rpl(endpoint, sch, val); 
     body = _.rpl(body, sch, val); 
     _.loop(headers, function (hn, hv) { 
      headers[hn] = _.rpl(hv, sch, val); 
     }); 
    }, true); 
    restRequest.setEndpoint(endpoint); 
    restRequest.setRequestBody(body); 
    _.loop(headers, function (hn, hv) { restRequest.setRequestHeader(hn, hv); }); 
}