2012-01-31 12 views
63

とHTTPポストマルチパートは、私は2つのパラメータが含まれているHTTPポストマルチパートを受信する必要があります体を設定するには? Chrome RESTコンソールを使用してHTTPコールをテストするつもりです。JSONパラメータとバイナリファイルの「ラベル」キーを正しく設定することをお勧めします。サーバー側ではREST 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文字列を取得するのは正しいですか? 1つのHTTPマルチパートリクエストでこれら2つのコンテンツを受信する他の方法はありますか?私が正しくあなたを理解していれば、事前

+1

これはどのようなRESTリソースですか? 2つの部分はどのようにリソースレベルに関連していますか? –

+0

実際、このリソースを扱う方法は、RESTfulではありません。これは、イメージが別のリソースではなくリソースの「コンポーネント」であるためです。 – thermz

答えて

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

これはまさに私が読む必要があるものです:-) thanks – thermz

+0

あなたは実際にsoap-uiに添付ファイルを追加することができます。これにより、実際の投稿本文とコンテンツタイプを渡す必要がなくなります。 –

+0

華麗な説明! – abbasdgr8