web-dev-qa-db-ja.com

REST-JSONを使用したHTTP Post Multipart

2つのパラメーターのみを含むHTTP Post Multipartを受け取る必要があります。

  • JSON文字列
  • バイナリファイル

体を設定する正しい方法はどれですか? Chrome RESTコンソールを使用してHTTP呼び出しをテストするので、正しい解決策はJSONパラメーターとバイナリの「ラベル」キーを設定することだろうかファイル。

サーバー側では、Resteasy 2.xを使用しており、Multipart本体を次のように読みます。

@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つのコンテンツを受信する他の方法はありますか?

前もって感謝します

83
thermz

私があなたを正しく理解していれば、HTTP/RESTコンソールから手動でマルチパートリクエストを作成します。マルチパート形式は単純です。簡単な紹介があります HTML 4.01仕様で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--
137
Vasiliy Faronov