2012-01-31 22 views
63

muszę otrzymać HTTP POST Multipart który zawiera tylko 2 parametry:REST - HTTP post Multipart z JSON

  • JSON ciąg
  • binarny plik

Która jest właściwa droga ustawić ciało? Mam zamiar przetestować wywołanie HTTP za pomocą konsoli REST Chrome, więc zastanawiam się, czy właściwym rozwiązaniem jest ustawienie "etykiety" klucza dla parametru JSON i pliku binarnego.

Po stronie serwera używam Resteasy 2.x, i mam zamiar przeczytać wieloczęściowej ciało tak:

@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 
} 

Czy ta droga? Czy pobranie ciągów JSON jest poprawne przy użyciu klucza "myJsonName", który identyfikuje konkretny układ treści? Czy istnieje inny sposób otrzymywania tych 2 treści w jednym żądaniu wieloczęściowym HTTP?

góry dzięki

+1

Jaki rodzaj zasobu REST to jest? W jaki sposób dwie części odnoszą się do poziomu zasobów? –

+0

W rzeczywistości sposób, w jaki obsłużyliśmy ten zasób, nie jest całkowicie URUCHOMIONY, ponieważ obraz jest "składnikiem" zasobu zamiast innego zasobu. – thermz

Odpowiedz

118

Jeśli rozumiem zostanie poprawnie, chcesz skomponować wieloczęściowy żądanie ręcznie z konsoli HTTP/REST. Format wieloczęściowy jest prosty; krótkie wprowadzenie można znaleźć in the HTML 4.01 spec. Musisz wymyślić granicę, która nie jest znaleziona w treści, powiedzmy HereGoes. Ustawiłeś nagłówek żądania Content-Type: multipart/form-data; boundary=HereGoes. Następnie powinien to być prawidłowy element żądania:

--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

Dokładnie to muszę przeczytać :-) dzięki – thermz

+0

Możesz dodać załącznik również w soap-ui. Ułatwia to przejście przez rzeczywistą treść wiadomości i treść. –

+0

Doskonałe wyjaśnienie! – abbasdgr8