2016-08-24 28 views
0

我有一個JavaScript數組,我試圖傳遞給我的mobilefirst Java適配器。我打電話給我的適配器像這樣,MobileFirst POST JavaScript數組到Java數組

myArr = [1,2,3]; 
var sendPost = new WLResourceRequest(
       "/adapters/MyAdpater/path", 
       WLResourceRequest.POST 
     ); 
var formParam = {"arr":myArr}; 
sendTicketPost.sendFormParameters(formParams); 

然後在我的適配器,我可以有我的方法,並得到帕拉姆

public JSONObject postAdapterFx(@FormParam("arr") List<Integer> myArray) {} 

目前,當我送這個,我只是得到一個400錯誤,這是因爲適配器並不像表單參數那樣,所以我還可以在適配器中設置myArray?我可以將它作爲字符串發送,然後將字符串轉換爲java中的List<Integer>,但這非常麻煩,我想避免這樣做。

那麼我怎麼能通過這個數組?

感謝您的幫助

回答

0

您可以使用request.send(yourArray)在body中做到這一點。然後你可以用Java在緩衝區中讀取它。從知識中心

var request = WLResourceRequest(url, method, timeout); 
request.send(json).then(
    function(response) { 
    // success flow 
    }, 
    function(error) { 
    // fail flow 
    } 
); 
0

比如你需要表單數據發送到適配器之前採取額外的步驟。 sendFormParameters只接受具有簡單值的對象,即字符串,整數和布爾值;在你的情況下,arr是一個數組。

創建一個效用函數,將編碼形式的數據,你可以使用以下命令:

function encodeFormData(data) { 
    var encoded = ''; 

    for(var key in data) { 
    var value = data[key]; 

    if(value instanceof Array) { 
     encoded += encodeURI(key+'='+value.join('&'+key+'=')); 
    } else { 
     encoded += encodeURI(key+'='+value); 
    } 

    encoded += '&'; 
    } 

    return encoded.slice(0, -1); 
} 

然後,你將需要更新您的代碼如下:

var myArr = [9,2,3]; 
var sendPost = new WLResourceRequest("/adapters/Cool/users/cool", WLResourceRequest.POST); 
var formParam = {"arr" : myArr}; 
sendPost.sendFormParameters(encodeFormData(formParam));