2015-02-11 65 views
2

這可能有點愚蠢的問題,但如果可以在RESTful web服務下的POST方法中的@FormParam中接收JSON對象,我很困惑如何在Java中的RESTful(WEB SERVICE)POST方法中接收json對象

@POST 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
@Path("/fetch/") 
public List<MyObject> getCandidate(@FormParam("CodeList") 
List<String> codeList) 
{ 
    List<MyObject> myobjects = null; 
    try { 
     //some code 
    } catch (Exception e) { 
     //some exception if occur 
    } 
    return myobjects; 
} 

而如果我想獲得param形式的userdefine對象。

@POST 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
@Path("/fetch/") 
public List<MyObject> getCandidate(@FormParam("CodeList") 
List<MyObject> formMyObjectList) 
{ 
    List<MyObject> myobjects = null; 
    try { 
     //some code 
    } catch (Exception e) { 
     //some exception if occur 
    } 
    return myobjects; 
} 

在此先感謝。

+0

恩,你試過了嗎?提示:無論如何,它都使用'@ POST'工作。 – Smutje 2015-02-11 07:33:10

+1

您需要將其作爲字符串獲取並自行解組,或者編寫MessageBodyReader。前者可能更容易,見[這裏](http://stackoverflow.com/a/27949340/2587435)。嘗試使用另一種類型的方法參數,您將需要一個自定義提供程序。否則,你爲什麼要接受作爲一個表單參數呢?使用表單參數,你應該@Consume(「application/x-www-form-urlencod」)'。如果你想'應用程序/ json'然後發送身體爲JSON – 2015-02-11 07:36:01

+0

感謝您的迴應Smutje。如何通過將整個對象發送到REST來檢查相同的內容。 我有很多數據要接收,所以我不想爲對象的每個單獨元素使用@FormParam。我想收到它作爲一個整體對象,所以我可以執行它的登錄。 – 2015-02-11 07:42:57

回答

3

這是可能的,但是您需要了解什麼是@FormParam,基本上它會從特定的html表單接收值,因爲您可能知道@FormParam需要知道您要從請求中採用的參數是什麼@ FormParam(「myParam」),如果你想消費JSON,你需要提供它。所以答案是你不需要使用@FormParam消耗JSON

上面的意思是,而不是發送一個鍵/值的屬性,你需要發送完整的JSON,顯然你需要生成該JSON使用可能jQuery或甚至JavaScript然後發送到您的端點應該是這樣的。

@POST 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
@Path("/fetch/") 
public List<MyObject> getCandidate(MyBean mybean){} 

其中MyBean類需要在JSON中發送的字段。這裏的神奇感謝MessageBodyReader,你應該在你的類路徑中有傑克遜,你可以找到一個例子here。如果您閱讀this也是個好主意。

相關問題