2012-01-31 63 views
63

我需要得到一個HTTP POST多部分僅包含2個參數:REST - HTTP後多部分用JSON

  • JSON字符串
  • 二進制文件

這是正確的方式設置身體? 我打算使用Chrome REST控制檯測試HTTP調用,所以我想知道是否正確的解決方案是爲JSON參數和二進制文件設置「標籤」鍵。

在我使用RestEasy的2.x的服務器端,而我要讀多域主體是這樣的:

@POST 
@Consumes("multipart/form-data") 
public String postWithPhoto(MultipartFormDataInput multiPart) { 
    Map <String, List<InputPart>> params = multiPart.getFormDataMap(); 
    String myJson = params.get("myJsonName").get(0).getBodyAsString(); 
    InputPart imagePart = params.get("photo").get(0); 
    //do whatever I need to do with my json and my photo 
} 

這是要走的路? 使用標識特定內容處置的密鑰「myJsonName」檢索我的JSON字符串是否正確? 是否有任何其他方式在一個HTTP多部分請求中接收這2個內容?

在此先感謝

+1

這是什麼樣的REST資源?兩部分在資源級別上如何關聯? – 2012-01-31 14:21:50

+0

實際上,我們處理這個資源的方式並不完全是RESTful,因爲圖像是資源的「組件」而不是另一個資源。 – thermz 2012-01-31 14:25:10

回答

118

如果我理解正確的話,你想從一個HTTP/REST控制檯手動撰寫多請求。多部分格式很簡單;簡要介紹可以發現in the HTML 4.01 spec。你需要想出一個邊界,這是一個在內容中找不到的字符串,比如說HereGoes。您設置請求標頭Content-Type: multipart/form-data; boundary=HereGoes。那麼這應該是一個有效的請求體:

--HereGoes 
Content-Disposition: form-data; name="myJsonString" 
Content-Type: application/json 

{"foo": "bar"} 
--HereGoes 
Content-Disposition: form-data; name="photo" 
Content-Type: image/jpeg 
Content-Transfer-Encoding: base64 

<...JPEG content in base64...> 
--HereGoes-- 
+1

這正是我需要閱讀:-)謝謝 – thermz 2012-01-31 15:57:50

+0

您實際上也可以在soap-ui中添加附件。這減輕了必須傳遞實際的帖子內容和內容類型。 – 2014-03-28 00:37:41

+0

絕妙的解釋! – abbasdgr8 2014-09-06 22:31:00