カテゴリ: SpringのWeb開発(Spring MVC) 更新日: 2026/01/27

Spring MVCの@RequestParam + MultipartFileの基本的な使い方|初心者向けにファイルアップロードを丁寧に解説

Spring MVCの@RequestParam + MultipartFile の基本的な使い方
Spring MVCの@RequestParam + MultipartFile の基本的な使い方

新人と先輩の会話形式で理解しよう

新人

「Spring MVCでファイルアップロードを実装しているんですが、Controllerで@RequestParamとMultipartFileを一緒に使う理由がよく分からなくて……。」

先輩

「確かに最初は混乱しやすいですね。ファイルも実はリクエストパラメータの一種として扱われているんですよ。」

新人

「えっ、ファイルって特別なものだと思っていました。文字の入力とは違うんですよね?」

先輩

「仕組みを知ると納得できます。Spring MVC @RequestParamとMultipartFileの基本から順番に整理していきましょう。」

1. Spring MVCにおける@RequestParamとは何か

1. Spring MVCにおける@RequestParamとは何か
1. Spring MVCにおける@RequestParamとは何か

Spring MVCにおける@RequestParamとは、画面から送信されたリクエストパラメータを、 Controllerのメソッド引数として受け取るためのアノテーションです。 フォームの入力項目で入力された値は、HTTPリクエストとしてサーバに送信されます。

例えば、名前やメールアドレスなどの入力欄は、 送信時に「パラメータ名」と「値」の組み合わせとしてサーバに届きます。 @RequestParamは、そのパラメータ名を指定して値を受け取る役割を持っています。

初心者の方は、 「Controllerの引数に書くだけで、なぜ値が入るのか」 と疑問に思うことが多いですが、 Spring MVCが内部でリクエストを解析し、 自動的に値をセットしてくれています。

Spring MVC @RequestParamは、 フォーム送信を扱ううえで最も基本となる仕組みです。 文字列や数値だけでなく、 ファイルアップロードでもこの考え方が使われています。


@PostMapping("/submit")
public String submit(@RequestParam String name) {
    return "result";
}

このように@RequestParamを使うことで、 フォームから送信されたデータを簡単に受け取れます。 ファイルアップロードも、 実はこの延長線上にある仕組みです。

2. ファイルアップロードと@RequestParamの関係

2. ファイルアップロードと@RequestParamの関係
2. ファイルアップロードと@RequestParamの関係

ファイルアップロードというと、 「文字の入力とは全く別の特別な処理」 というイメージを持つ方が多いです。 しかし、Spring MVCでは、 ファイルもリクエストパラメータの一部として扱われます。

画面からファイルを選択して送信すると、 ファイルの中身はHTTPリクエストに含められます。 このとき、multipart/form-dataという形式で、 文字データとファイルデータが一緒に送信されます。

Spring MVCは、 このmultipart形式のリクエストを解析し、 ファイル部分を特別なオブジェクトに変換します。 そのオブジェクトがMultipartFileです。

つまり、 「ファイルもフォーム送信の一部であり、 @RequestParamで受け取れる」 という考え方になります。 これが、Spring MVC @RequestParamと MultipartFileが一緒に使われる理由です。


<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <button type="submit">送信</button>
</form>

このHTMLでは、 fileという名前のパラメータとしてファイルが送信されます。 Spring MVCは、 この名前をもとにControllerの引数と紐付けます。

3. MultipartFileを@RequestParamで受け取る基本概念

3. MultipartFileを@RequestParamで受け取る基本概念
3. MultipartFileを@RequestParamで受け取る基本概念

MultipartFileとは、 Spring MVCでアップロードされたファイルを表すための型です。 ファイルの名前やサイズ、 ファイルの中身などをまとめて扱えるオブジェクトです。

初心者の方が混乱しやすい点は、 「MultipartFileは実際のファイルなのか」 という部分です。 正確には、 MultipartFileはアップロードされたファイル情報を 一時的に保持しているオブジェクトです。

Spring MVCでは、 @RequestParamを使って MultipartFileを受け取ることで、 ファイルアップロード処理を簡単に実装できます。 文字列と同じように、 引数として受け取れる点が特徴です。


@PostMapping("/upload")
public String upload(@RequestParam MultipartFile file) {
    if (file.isEmpty()) {
        return "error";
    }
    return "result";
}

この例では、 フォームから送信されたファイルを MultipartFileとして受け取っています。 isEmptyを使うことで、 ファイルが選択されていない場合のチェックも可能です。

Spring MVC @RequestParamとMultipartFileを使うことで、 ファイルアップロードの基本的な処理は 非常にシンプルに書けます。 重要なのは、 「ファイルもリクエストパラメータの一つ」 という考え方を理解することです。

この基本概念を押さえておくと、 後の保存処理やチェック処理も スムーズに理解できるようになります。 Spring MVC ファイルアップロードの基礎として、 @RequestParamとMultipartFileの役割を しっかり覚えておきましょう。

4. @RequestParamでファイルを受け取る仕組み

4. @RequestParamでファイルを受け取る仕組み
4. @RequestParamでファイルを受け取る仕組み

Spring MVCで@RequestParamを使ってファイルを受け取れる理由は、 ファイルアップロードのリクエストも通常のフォーム送信と同じく、 リクエストパラメータとして扱われているからです。 ここを理解しないまま実装すると、 「なぜ@RequestParamが必要なのか」 「どこでファイルを受け取っているのか」 が分からなくなりがちです。

画面から送信されたmultipart/form-data形式のリクエストは、 Spring MVCの内部処理によって分解されます。 文字の入力項目は通常のリクエストパラメータとして扱われ、 ファイル部分はMultipartFileという形に変換されます。

その後、Controllerのメソッドが呼び出される際に、 @RequestParamで指定された名前と一致するパラメータが、 引数として自動的に渡されます。 ファイルの場合も同様で、 name属性と@RequestParamの名前が一致していれば、 MultipartFileとして受け取れる仕組みです。

新人と先輩の会話でよくあるのが、 「Controllerで特別な設定をしていないのに、 なぜファイルが受け取れるのか」 という疑問です。 これはSpring MVCが、 リクエスト解析から引数へのセットまでを すべて内部で自動処理しているためです。

5. @RequestParamと通常のリクエストパラメータの違い

5. @RequestParamと通常のリクエストパラメータの違い
5. @RequestParamと通常のリクエストパラメータの違い

@RequestParamは、 文字列や数値などの通常の入力項目でも、 ファイルアップロードでも使われます。 そのため、 「ファイルの場合は特別なアノテーションが必要なのでは」 と誤解されることがあります。

実際には、 文字データとファイルデータの違いは、 Spring MVCが内部でどの型に変換するかだけです。 文字データはStringや数値型に、 ファイルデータはMultipartFileに変換されます。

@RequestParamが必要な理由は、 「どのパラメータを、どの引数に割り当てるか」 をSpring MVCに伝えるためです。 ファイルであっても、 パラメータ名を明示しなければ、 正しく受け取れません。

初心者が混乱しやすいポイントは、 「MultipartFile型を書いただけで受け取れるのでは」 という考え方です。 実際には、 @RequestParamがあることで、 ファイルとフォーム項目の対応関係が明確になります。

6. ControllerでMultipartFileを受け取る基本的な書き方

6. ControllerでMultipartFileを受け取る基本的な書き方
6. ControllerでMultipartFileを受け取る基本的な書き方

ControllerでMultipartFileを受け取る基本形は、 @RequestParamとMultipartFileを組み合わせた書き方です。 この形を覚えておくと、 Spring MVC ファイルアップロードの実装で迷いにくくなります。

ファイルを受け取るだけであれば、 非常にシンプルなコードで実装できます。 まずは、 「ファイルがControllerに届いているか」 を確認することが重要です。


@PostMapping("/upload")
public String upload(@RequestParam MultipartFile file) {
    String fileName = file.getOriginalFilename();
    return "result";
}

このコードでは、 フォームから送信されたファイルを MultipartFileとして受け取り、 元のファイル名を取得しています。 保存処理などは行っていませんが、 まずは受け取れる状態を作ることが大切です。

新人がよくつまずくのは、 「ファイルがnullになる」 「エラーにならないのに中身がない」 といったケースです。 多くの場合、 name属性と@RequestParamの指定が一致していないことが原因です。

7. 複数の入力項目とMultipartFileを同時に扱う考え方

7. 複数の入力項目とMultipartFileを同時に扱う考え方
7. 複数の入力項目とMultipartFileを同時に扱う考え方

実際のWebアプリケーションでは、 ファイルだけを送信するケースは少なく、 文字入力とファイルを同時に送信することがほとんどです。 Spring MVCでは、 これらを同じControllerメソッドで受け取れます。

ここで重要なのは、 「すべての入力項目がリクエストパラメータである」 という考え方です。 文字データもファイルデータも、 @RequestParamで受け取る点は共通しています。


@PostMapping("/upload")
public String upload(
        @RequestParam String title,
        @RequestParam MultipartFile file) {
    return "result";
}

この例では、 タイトルという文字入力と、 ファイルアップロードを同時に受け取っています。 Spring MVCは、 それぞれのパラメータ名をもとに、 正しい引数へ値をセットします。

新人と先輩の会話でよくあるのが、 「引数の順番は関係あるのか」 という疑問です。 @RequestParamの場合、 引数の順番は関係ありません。 パラメータ名が一致しているかどうかが重要です。

Spring MVC MultipartFileと@RequestParamを組み合わせたファイルアップロードでは、 「フォームのname属性」 「@RequestParamの指定」 「Controllerの引数」 がすべて対応しているかを意識することが、 トラブルを防ぐ最大のポイントです。 この考え方を身につけることで、 複雑なフォーム送信にも対応できるようになります。

8. @RequestParam + MultipartFileでよくある書き間違い

8. @RequestParam + MultipartFileでよくある書き間違い
8. @RequestParam + MultipartFileでよくある書き間違い

Spring MVC @RequestParamとMultipartFileを使ったファイルアップロードで、 初心者が最初につまずく原因の多くは、書き間違いによるものです。 コード自体はシンプルでも、 ほんの少しの指定漏れや不一致で、 ファイルが受け取れなくなります。

特に多いのが、 フォーム側のname属性と、 Controller側の@RequestParamの指定が一致していないケースです。 見た目では気付きにくく、 「なぜファイルがnullになるのか」 と悩む原因になります。


@PostMapping("/upload")
public String upload(@RequestParam("uploadFile") MultipartFile file) {
    return "result";
}

この場合、 HTML側のinputタグのname属性が uploadFileでなければ、 MultipartFileには何も入ってきません。 Spring MVCは、 名前の一致だけを見て処理を行っています。

新人と先輩の会話でもよくあるのが、 「Controllerの書き方は合っているはずなのに動かない」 という相談です。 多くの場合、 HTMLとControllerの対応関係を もう一度見直すことで解決します。

9. ファイルが取得できないときの原因と対処法

9. ファイルが取得できないときの原因と対処法
9. ファイルが取得できないときの原因と対処法

ファイルが取得できないとき、 初心者はController側のコードだけを疑いがちです。 しかし、Spring MVC ファイルアップロードでは、 画面側の設定も同じくらい重要です。

最も多い原因の一つが、 フォームタグにmultipart/form-dataの指定がないことです。 この指定がない場合、 ファイルはリクエストに含まれません。


<form action="/upload" method="post">
    <input type="file" name="file">
    <button type="submit">送信</button>
</form>

このような書き方では、 ファイルアップロードは正しく動作しません。 enctypeの指定は、 Spring MVC MultipartFileを使ううえで必須です。

また、 ファイルが選択されていない場合でも、 MultipartFile自体は生成されます。 そのため、 nullではなくisEmptyで判定する必要があります。 「nullチェックをしているのに動かない」 という場合は、 この点を疑ってみましょう。

10. 実務でよく使われる@RequestParam + MultipartFileのパターン

10. 実務でよく使われる@RequestParam + MultipartFileのパターン
10. 実務でよく使われる@RequestParam + MultipartFileのパターン

実務では、 ファイル単体ではなく、 複数の入力項目と一緒に扱うケースがほとんどです。 Spring MVC @RequestParamとMultipartFileは、 こうした要件にも柔軟に対応できます。

例えば、 タイトルや説明文と一緒にファイルを送信する場合、 すべてを@RequestParamで受け取るのが基本です。


@PostMapping("/upload")
public String upload(
        @RequestParam String title,
        @RequestParam String description,
        @RequestParam MultipartFile file) {

    if (file.isEmpty()) {
        return "error";
    }
    return "result";
}

このように、 通常のリクエストパラメータと MultipartFileを同時に扱うのが、 実務では一般的です。 Spring MVCは、 それぞれを自動で正しい型に変換してくれます。

実務で意識すべきなのは、 「受け取ったあと、どう扱うか」です。 ファイルサイズのチェックや、 拡張子の確認などは、 ControllerやService層で行うことが多くなります。

11. 初心者が混乱しやすいポイント整理

11. 初心者が混乱しやすいポイント整理
11. 初心者が混乱しやすいポイント整理

Spring MVC @RequestParam + MultipartFileで、 初心者が混乱しやすいポイントは共通しています。 その多くは、 仕組みを知らないことが原因です。

まず、 ファイルは特別な存在ではなく、 リクエストパラメータの一部だという点です。 この考え方を知らないと、 なぜ@RequestParamが必要なのか分からなくなります。

次に、 MultipartFileは実体のファイルではなく、 アップロードされた情報を保持するオブジェクトである点です。 そのため、 保存処理をしなければ、 サーバにファイルは残りません。

新人と先輩の会話でよくあるのが、 「アップロードしたのにサーバにファイルがない」 という勘違いです。 これは、 MultipartFileの役割を正しく理解できていないことが原因です。

12. @RequestParam + MultipartFileを正しく理解するための考え方

12. @RequestParam + MultipartFileを正しく理解するための考え方
12. @RequestParam + MultipartFileを正しく理解するための考え方

Spring MVC @RequestParamとMultipartFileを正しく理解するためには、 フォーム送信の仕組みを一度シンプルに考えることが大切です。 ファイルも文字入力も、 すべてはHTTPリクエストとして送信されています。

Spring MVCは、 そのリクエストを解析し、 開発者が扱いやすい形に変換してくれます。 @RequestParamは、 その変換結果を受け取るための窓口です。

「なぜファイルがnullになるのか」 「なぜ受け取れないのか」 と悩んだときは、 HTMLのname属性、 enctypeの指定、 Controllerの引数定義、 この三点を順番に確認してみてください。

Spring MVC ファイルアップロードは、 仕組みさえ理解できれば、 決して難しいものではありません。 @RequestParam + MultipartFileの基本を押さえることで、 安定した実装ができるようになります。 この考え方を身につけておくことが、 今後のSpring MVC開発の大きな土台になります。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
SpringのWeb開発(Spring MVC)
Spring MVCの@RequestParam + MultipartFileの基本的な使い方|初心者向けにファイルアップロードを丁寧に解説
New2
SpringのWeb開発(Spring MVC)
Spring MVCで学ぶファイルアップロードとは?基本概念|初心者向けに仕組みから丁寧に解説
New3
SpringのWeb開発(Spring MVC)
Spring MVCにおけるBindingResultの仕組みと基本的な使い方|初心者向けにフォームバリデーションを丁寧に解説
New4
SpringのWeb開発(Spring MVC)
Spring Bootのmessages.propertiesによるバリデーションエラーメッセージ定義|初心者向けに仕組みから丁寧に解説
人気記事
No.1
Java&Spring記事人気No1
Thymeleaf
Thymeleaf とは?初心者向けにThymeleafの基本を徹底解説
No.2
Java&Spring記事人気No2
SpringのDB操作
JPAの標準クエリメソッド(findById, findAll)を完全解説!初心者でもわかるデータ取得の基本
No.3
Java&Spring記事人気No3
Spring認証(Spring Security)
Spring Securityの概要と仕組みを完全ガイド!初心者でもわかるセキュリティ対策
No.4
Java&Spring記事人気No4
SpringのAPI開発(REST & GraphQL)
REST APIの主要なHTTPメソッド(GET, POST, PUT, DELETE)を初心者向けにわかりやすく解説!
No.5
Java&Spring記事人気No5
Springの基本
Spring Bootの環境変数の設定方法をやさしく解説!初心者向けapplication.propertiesの使い方
No.6
Java&Spring記事人気No6
Springの基本
Springの@Autowiredとは?依存性注入(DI)を初心者向けに解説
No.7
Java&Spring記事人気No7
SpringのWeb開発(Spring MVC)
@Controller と @RestController の違いを完全解説!初心者向けSpring MVC入門
No.8
Java&Spring記事人気No8
Spring認証(Spring Security)
セッション管理の基本(@SessionAttributes)を完全解説!初心者でもわかるセッションの仕組み