2015-06-22 71 views
2

我有一個API端點方法是這樣的:如何通過Google Cloud Endpoints收到<ArrayList>?

@ApiMethod(name = "test") 
public TestModel test(@Named("testArray") ArrayList<String> myTest) { 
for (String i:myTest){ 
    log.warning("i=="+i); 
} 

的請求作出這樣的:

{ 
"testArray":[ 
    "ID1", 
    "ID2" 
] 
} 

然而,當我檢查我的日誌(也是這引起了我的應用程序的問題) ,我看到

i=="ID1,ID2" 

我沒怎麼期望看到:

i=="ID1" 
i=="ID2" 

作爲輸出。它將數組的兩個元素放入myTest(0)中。 如何正確填充數組?

回答

2

在最新的SDK 1.9.22上不會出現此問題。

我想知道你是如何創建請求的,如果你可能只是用逗號作爲你發送的數組中的單個元素加入字符串。雖然我知道這樣做故意聽起來很瘋狂,但我不認爲你這樣做,有可能在你的代碼下面有一些抽象層做到這一點?

另一種可能性是,您沒有爲您的Endpoints API使用生成的客戶端庫(您確實應該,它會完成大量工作,您最終會自行復制),並且您正在生成JSON發送過來?在這種情況下,我可以看到最終發送的請求可能與您的期望有什麼不同,將「testArray」中的所有值摺疊爲逗號分隔列表中的關鍵字。

因此,我最好的建議是檢查您如何形成請求,並且如果可能,請在端點方法內部查看get access to the raw request itself以查看發送的內容。

+0

偉大的答案,讓我澄清幾點。 1.請求與上面輸入的內容完全相同。我簡單地用ID1 ID2取代9位用戶ID以用於SO目的。我只在後端工作,前端android對我來說非常神奇,所以我不能說出請求中可能發生的任何扼殺。爲了進行調試,我的前端工程師通過冗餘發送了他的請求。 2.根據客戶端庫,我相信他們正在使用它。我們已將我們的項目合併到android studio中。 3.我們正在使用最新的SDK。 你能否提出另一個調試步驟? – Japes

+0

如果你不知道系統是如何工作的,你應該有人打開並管理有關這些系統相關問題的stackoverflow線程。發佈的JSON對象更像是想要發送的內容,而不是發送的實際有效內容。什麼特定的代碼在客戶端形成請求?在正確制定請求時,我部署了一個API,其代碼與您的預期一致。另外,你有沒有設法檢查原始的HttpServletRequest對象? – Nick

+0

我會喜歡前端開發人員研究這個問題,但是由於我們找到了解決方法,他們太忙了。 (另外,他們只會說日語)。由於我們即將發佈並忙於最終測試,因此我還沒有查看需求。發佈後,我們會進一步研究這個問題並創建一個補丁。那時我會更新這個主題,因爲我個人對此非常好奇。感謝您的關注。 – Japes

1

最簡單的方法,因爲這看起來像一個錯誤,是不使用命名參數。創建一個具有列表字段的新請求類,並將其用作未命名(又名資源)參數。

+0

似乎更多的工作。我目前的解決方法是將類型更改爲簡單的字符串。由於請求是用逗號分隔的列表填充ArrayList(0),我只是將列表解析成一個數組(我已經寫過這個函數)並繼續。我會在時間允許的情況下測試你的方法,如果結果正確的話,選擇它是正確的。 – Japes

+0

以及我應該補充說,請求來自相關的Android應用程序。以防萬一,這會有所作爲。 – Japes

相關問題