[解決済み] Spring MVCのJSONによるマルチパートリクエスト
質問
Spring MVCを使用して、JSONデータを含むファイルを投稿したいです。そこで、私は以下のようなレストサービスを開発しました。
@RequestMapping(value = "/servicegenerator/wsdl", method = RequestMethod.POST,consumes = { "multipart/mixed", "multipart/form-data" })
@ResponseBody
public String generateWSDLService(@RequestPart("meta-data") WSDLInfo wsdlInfo,@RequestPart("file") MultipartFile file) throws WSDLException, IOException,
JAXBException, ParserConfigurationException, SAXException, TransformerException {
return handleWSDL(wsdlInfo,file);
}
レストクライアントからリクエストを送るときに
content-Type = multipart/form-data or multipart/mixed
で送信すると、次のような例外が発生します。
org.springframework.web.multipart.support.MissingServletRequestPartException
誰かこの問題を解決するために私を助けることができますか?
私は
@RequestPart
を使用して、Multipart と JSON の両方をサーバーに送信できますか?
どのように解決するのですか?
Spring MVCのMultipart RequestをJSONデータで実装する方法です。
JSONデータによるMultipartリクエスト(Mixed Multipartとも呼ばれる)。
Spring 4.0.2 ReleaseのRESTfulサービスでは、@RequestPartを使用して、最初のパートをXMLまたはJSON形式のデータ、次のパートをファイルとしてHTTPリクエストを実現することができます。以下はその実装例です。
Javaスニペットです。
ControllerのRestサービスでは、@RequestPartとMultipartFileを混在させて、Multipart + JSONのリクエストを処理することになります。
@RequestMapping(value = "/executesampleservice", method = RequestMethod.POST,
consumes = {"multipart/form-data"})
@ResponseBody
public boolean executeSampleService(
@RequestPart("properties") @Valid ConnectionProperties properties,
@RequestPart("file") @Valid @NotNull @NotBlank MultipartFile file) {
return projectService.executeSampleService(properties, file);
}
フロントエンド(JavaScript)のスニペットです。
-
FormDataオブジェクトを作成します。
-
以下のいずれかの手順で、FormDataオブジェクトにファイルを追加します。
-
file"型の入力要素を用いてファイルをアップロードした場合、そのファイルをFormDataオブジェクトに追加します。
formData.append("file", document.forms[formName].file.files[0]);
-
FormDataオブジェクトに直接ファイルを追加する。
formData.append("file", myFile, "myfile.txt");
またはformData.append("file", myBob, "myfile.txt");
-
file"型の入力要素を用いてファイルをアップロードした場合、そのファイルをFormDataオブジェクトに追加します。
-
文字列化されたJSONデータでblobを作成し、FormDataオブジェクトに追加します。これにより、マルチパートリクエストの2番目の部分の Content-type は、ファイルタイプではなく "application/json" になります。
-
サーバーにリクエストを送信します。
-
リクエストの詳細です。
Content-Type: undefined
. これにより、ブラウザはContent-Typeをmultipart/form-dataに設定し、boundaryを正しく埋めるようになります。手動で Content-Type を multipart/form-data に設定すると、リクエストの boundary パラメータを埋められなくなります。
Javascriptのコードです。
formData = new FormData();
formData.append("file", document.forms[formName].file.files[0]);
formData.append('properties', new Blob([JSON.stringify({
"name": "root",
"password": "root"
})], {
type: "application/json"
}));
リクエストの詳細
method: "POST",
headers: {
"Content-Type": undefined
},
data: formData
リクエストのペイロード。
Accept:application/json, text/plain, */*
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryEBoJzS3HQ4PgE1QB
------WebKitFormBoundaryvijcWI2ZrZQ8xEBN
Content-Disposition: form-data; name="file"; filename="myfile.txt"
Content-Type: application/txt
------WebKitFormBoundaryvijcWI2ZrZQ8xEBN
Content-Disposition: form-data; name="properties"; filename="blob"
Content-Type: application/json
------WebKitFormBoundaryvijcWI2ZrZQ8xEBN--
関連
-
[解決済み】tsconfig.json: Build:No inputs were found in config file.
-
JsonParseException: 不正な引用符なしの文字 ((CTRL-CHAR, コード 10)): ha
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] Node.js プロジェクトの package.json ファイルを自動的にビルドする方法はありますか?
-
[解決済み】なぜPythonはこのJSONデータをパースできないのですか?[終了] PythonがこのJSONデータをパースできないのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Kubernetes / kubectl - 「コンテナ名を指定する必要があります」とありますが、そのような感じですか?
-
[解決済み] Golang で文字列を構造体のようにアンマーシャリングする
-
[解決済み] ヘッダ値:application/vnd.api+json
-
ジャクソン・ジャクソン・コア
-
[解決済み] JSON標準 - 浮動小数点数
-
[解決済み] JSONのXSLT対応
-
Ext.grid.EditorGridPanelを使用する際に発生する問題点
-
[解決済み】PostmanでファイルやJSONデータをアップロードする方法は?
-
[解決済み] PostgreSQL は結果セットを JSON 配列として返しますか?
-
[解決済み] GoでJSONを部分的にマップにアンマーシャルする