2012-11-26 27 views
0

我有一個REST服務。 GET方法的輸入類型是List<String>列表<String>作爲GET方法的輸入

@GET 
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 
public List<myObject> getData(List<String> IDs) { 
    .... 
} 

我試圖測試使用捲曲此方法。我用了很多不同的數據組合的:

curl -X GET --data-binary '{"IDs":["TestString1","TestString2"]}' -H "Content-Type: application/json" http://localhost:8080/myModule/rs/getData -v 
          '{"TestString1","TestString2"}' 
          '["TestString1","TestString2"]' 
          so on 

但我總是得到迴應:

Can not deserialize instance of java.util.ArrayList out of START_OBJECT token 
or 
Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token 

是否有可能有輸入作爲List<String>?我的捲曲請求是否有誤?

回答

4

它看起來就像你sending a POST request

--data二進制<數據>

(HTTP)這帖子數據完全一樣,沒有額外的處理任何規定。

由於-X sets a custom request type,我猜測它沒有檢測到它需要URL編碼數據:

-X,--request <命令>

(HTTP)指定自定義請求方法在與HTTP服務器通信時使用。將使用指定的請求,而不是使用其他方法(默認爲GET)。有關詳細信息和解釋,請閱讀HTTP 1.1規範。常見的附加HTTP請求包括PUT和DELETE,但像WebDAV這樣的相關技術提供了PROPFIND,COPY,MOVE等等。

因此,與-G,而不是嘗試:

-G,--get

使用時,此選項將與-d,--data或--data-指定的所有數據二進制文件用於HTTP GET請求,而不是POST請求,否則將使用該請求。這些數據將被附加到網址上,並帶有'?'分隔器。

+0

沒有,嫋嫋不希望工作。 ( - 謝謝 - 你幫我找到了bug –

+0

@VictorMezrin它是空的,因爲你正在發一個POST請求,所以方法期望GET,所以Jersey忽略了POST數據。 –

0

我找到了解決方案:)

方法簽名應該是

@GET 
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 
public List<myObject> getData(@QueryParam("myParamName") List<String> IDs) { 
    .... 
} 

捲曲請求

curl -X GET -H "Content-Type: application/json" http://localhost:8080/myModule/rs/getData?myParamName={dfsf,ddsfdss,sdfsf} -v 

工程:)