1. ホーム
  2. ジャワ

ファイルアップロードエラーの解決方法 現在のリクエストはマルチパートリクエストではありません

2022-03-01 06:12:13

1. 問題現象

    ファイルアップロードインターフェイスで書き込みを行う際、図のように入力されるパラメーターがMultipartFileファイルや他の種類のパラメーターになります。

    その結果、フロントエンドの呼び出しは、エラー org.springframework.web.multipart.MultipartException を報告します。Current request is not a multipart request, and finds that the orgId parameter is spliced into the url and apparently not passed in together.

2. 問題点の分析

    どうやらエラーメッセージから、それはエラーがExcelのフォームのアップロードを作成するためにスプリングブートを使用するときに報告されているため、ファイルをアップロードするために使用されるContent-Typeはmultipart/form-dataでなければなりませんので、インターフェイスのコンテンツタイプに設定されたフロントエンドは、アプリケーション/ jsonにアップロードファイルインタフェーステスト私はまだ同じエラーが報告されていたことがわかった。そこで、MultipartFileのファイルパラメータを最初に入れるなど、いろいろな解決案をググってみたところ、やはりうまくいかないことがわかりました。

3. 解決方法

3.1 ファイルや他のパラメータを渡す前にラップする

この件で頭を悩ませているうちに、orgIdパラメータがurlにスプライスされており、明らかに一緒に渡されていないことに気づきました。そこで、2つの異なるフォーマットされたパラメータをエンティティクラスにラップして渡すことを考えます。

import lombok.Data;
import org.springframework.web.multipart.MultipartFile;

@Data
public class ImportUser {
    private MultipartFile file;
    private String orgId;
}
public ResponseBean ImportUsers(@RequestBody ImportUser importUser,HttpServletRequest request) throws Exception{

}

 public ResponseBean ImportUsers(MultipartFile file,String orgId,HttpServletRequest request) throws Exception {

}

    エラーは報告されず、問題は解決されることがわかりました。

3.2 入力されるパラメーターの形式を指定しない

    しかし、ファイルをアップロードするたびにエンティティクラスのメソッドを渡すのは嫌だ、渡すパラメータの形式を指定しないことを検討する。それなら、先のアノテーションを付けずに試してみてください。

 public ResponseBean ImportUsers(MultipartFile file,String orgId,HttpServletRequest request) throws Exception {

}

    それでもエラーが報告されなくなったので、アノテーションなしのメソッドで解決できることがわかりました。