カテゴリ: Spring 更新日: 2026/01/24

Spring MVCの@PathVariableと@RequestParamを完全解説!初心者向けの使い分け・必須/任意・型変換・デフォルト値まで

Spring MVCの@PathVariableと@RequestParam:必須/任意・型変換・デフォルト値
Spring MVCの@PathVariableと@RequestParam:必須/任意・型変換・デフォルト値

先生と生徒の会話形式で理解しよう

生徒

「Spring MVCでURLのパラメータを受け取る方法って何がありますか?」

先生

「Spring MVCでは@PathVariable@RequestParamの2つがよく使われます。それぞれ使い方や用途が少し違うんですよ。」

生徒

「違いがよくわからなくて…あと、必須か任意にできるんですか?」

先生

「もちろんです。それでは一緒に、使い分けや注意点を詳しく見ていきましょう!」

1. @PathVariableとは?URLの一部を変数として受け取る方法

1. <code>@PathVariable</code>とは?URLの一部を変数として受け取る方法
1. @PathVariableとは?URLの一部を変数として受け取る方法

@PathVariableは、URLパスの一部をパラメータとして受け取るために使用されます。例えば、/users/123というURLの「123」の部分をコントローラーで受け取りたい場合に使います。


@GetMapping("/users/{id}")
public String getUser(@PathVariable Long id) {
    return "User ID: " + id;
}

この例では、URLの{id}部分がLong idにマッピングされます。

2. @RequestParamとは?クエリパラメータを受け取る方法

2. <code>@RequestParam</code>とは?クエリパラメータを受け取る方法
2. @RequestParamとは?クエリパラメータを受け取る方法

@RequestParamは、URLのクエリパラメータ(例:?page=2)を取得するために使われます。フォーム送信や検索機能でよく使われます。


@GetMapping("/search")
public String search(@RequestParam String keyword, @RequestParam int page) {
    return "キーワード:" + keyword + " ページ:" + page;
}

/search?keyword=java&page=2というリクエストに対して、keywordpageを受け取ります。

3. 必須か任意かを指定するには?

3. 必須か任意かを指定するには?
3. 必須か任意かを指定するには?

@RequestParamはデフォルトでrequired=trueになっており、パラメータが無いとエラーになります。ただし、任意にしたい場合はrequired=falseに設定します。


@GetMapping("/search")
public String search(@RequestParam(required = false) String keyword) {
    return "検索キーワード:" + keyword;
}

一方で、@PathVariableは基本的に必須ですが、バージョンによってはオプションで対応可能なケースもあります。ただし、RESTfulな設計では省略されることは少なく、使い方としては@RequestParamより柔軟性に欠けます。

4. 型変換は自動でしてくれるの?

4. 型変換は自動でしてくれるの?
4. 型変換は自動でしてくれるの?

@PathVariable@RequestParamで受け取る値は、基本的な型(intLongbooleanなど)であれば、Springが自動的に型変換してくれます。


@GetMapping("/age/{value}")
public String showAge(@PathVariable int value) {
    return "年齢:" + value;
}

ただし、文字列を数値に変換できない場合はエラーになるため、バリデーションも重要です。

5. デフォルト値を設定する方法

5. デフォルト値を設定する方法
5. デフォルト値を設定する方法

@RequestParamにはデフォルト値を設定できます。これにより、値が渡されなかった場合にもエラーを避けられます。


@GetMapping("/search")
public String search(@RequestParam(defaultValue = "1") int page) {
    return "ページ番号:" + page;
}

@PathVariableには直接デフォルト値を設定する方法はないため、別途コントロールロジックで対応します。

6. 実行結果を確認してみよう

6. 実行結果を確認してみよう
6. 実行結果を確認してみよう

/users/10 にアクセス → User ID: 10
/search?keyword=spring&page=2 にアクセス → キーワード:spring ページ:2
/search にアクセス(keywordが任意) → 検索キーワード:null
/search にアクセス(pageがデフォルト1) → ページ番号:1

7. @PathVariable@RequestParamの使い分けのポイント

7. <code>@PathVariable</code>と<code>@RequestParam</code>の使い分けのポイント
7. @PathVariable@RequestParamの使い分けのポイント
  • URLの一部を使うとき:@PathVariableを使う
  • 検索条件・オプション指定など:@RequestParamが便利
  • 任意/デフォルト値を使いたい:@RequestParamのほうが柔軟
  • REST API設計:リソースを特定するIDなどは@PathVariableが適している

8. HTMLでのURL設計とコントローラーの関係

8. HTMLでのURL設計とコントローラーの関係
8. HTMLでのURL設計とコントローラーの関係

HTMLフォームやリンクからのリクエストが、Spring MVCのコントローラーにどうマッピングされるかも重要です。


<form method="get" action="/search">
    <input type="text" name="keyword">
    <input type="submit" value="検索">
</form>

このフォームでは、@RequestParam("keyword")で受け取ることができます。一方、リンクからリソースIDを送る場合は@PathVariableが活躍します。


<a href="/users/5">ユーザー詳細</a>

9. よくあるエラーと対処法

9. よくあるエラーと対処法
9. よくあるエラーと対処法
  • MissingServletRequestParameterException:必須の@RequestParamが不足している
  • TypeMismatchException:型変換に失敗(文字列→数値など)
  • 404エラー:@PathVariableのURLが一致していない

これらのエラーを防ぐには、必須・任意・デフォルト値の扱いをしっかり理解することが重要です。

まとめ

まとめ
まとめ

今回はSpring MVCにおける@PathVariable@RequestParamの使い方について、初心者でも理解しやすいように解説しました。@PathVariableはURLの一部を変数として受け取り、リソースを特定する用途に向いています。一方@RequestParamは、検索条件やオプション指定に適しており、任意パラメータの設定やデフォルト値の設定が簡単に行える柔軟なアノテーションです。

特にREST API開発では、これらを正しく使い分けることが非常に重要です。例えば、ユーザーIDのように明確にリソースを表す情報は@PathVariableで受け取り、検索キーワードやページ番号のように任意で変動する情報は@RequestParamを使うことで、直感的でわかりやすいAPI設計が実現できます。

また、型変換の自動処理やバリデーションの重要性も見逃せません。Spring MVCでは基本的な型(intやbooleanなど)は自動的に変換されますが、文字列から数値への変換時にはエラーが発生する可能性があります。そのため、入力値の検証やエラーハンドリングも重要なポイントです。

実際のHTMLとコントローラーの連携においても、formタグを用いたGETリクエストでは@RequestParam、URLリンクによる詳細画面表示では@PathVariableが活躍します。これにより、フロントエンドとバックエンドの役割が明確になり、コードの見通しも良くなります。

さらに、@RequestParamrequired属性やdefaultValueを活用することで、ユーザーがパラメータを指定しなかった場合でも柔軟に対応可能です。このような実装は、ユーザーにとって使いやすく、開発者にとってもメンテナンスしやすいアプリケーションにつながります。

最後に、よくあるエラーとしてMissingServletRequestParameterExceptionTypeMismatchExceptionなどがあることも確認しました。こうした例外を防ぐには、パラメータの有無や型を意識した設計と適切なハンドリングが不可欠です。

ここまでで、Spring MVCのパラメータ受け取りに関する基本的な知識から実践的な使い分け、エラーハンドリングまで幅広く理解できたかと思います。ぜひ、実際のプロジェクトでも@PathVariable@RequestParamを使いこなし、保守性の高いAPI開発を目指しましょう。

先生と生徒の振り返り会話

生徒

「結局、@PathVariableはどんな場面で使うといいんですか?」

先生

「リソースを一意に識別するための値、たとえばユーザーIDや商品IDをURLの一部から取り出したいときに使います。RESTfulな設計にぴったりです。」

生徒

「じゃあ、@RequestParamは検索やフィルターの条件みたいな“オプション”に使うんですね?」

先生

「その通りです!requireddefaultValueも設定できるので、フォームの入力やページネーションにも最適です。」

生徒

「型変換も自動でしてくれるのは便利ですね。でも、失敗しないようにバリデーションも必要ですよね?」

先生

「まさにそのとおり。開発では想定外の入力が来ることもあるので、型だけでなく中身のチェックも大事です。」

生徒

「今日の学びでAPI設計の基本がだいぶわかってきました!」

先生

「これからは実際のプロジェクトでも意識して使い分けていきましょう。理解が深まったようで何よりです。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Spring MVCで@PathVariableと@RequestParamの違いがいまいちわかりません。どう使い分ければいいですか?

@PathVariableはURLの一部(パス)から値を受け取るのに使い、@RequestParamはURLのクエリパラメータ(?以降)から値を受け取るときに使います。例えば、ユーザーIDなどリソースの特定には@PathVariable、検索やページ番号など可変的な値には@RequestParamを使い分けます。

@RequestParamの値が存在しないときにエラーになるのを防ぐ方法はありますか?

@RequestParamにはrequired属性を指定できます。required=falseにするとパラメータが無くてもエラーにならず、nullとして扱われます。さらにdefaultValueを使うことで、デフォルト値も設定可能です。

Springの学習を効率化したい方へ

この記事の内容をもっと深く知るには、以下の入門書が最適です。

Spring Framework超入門をAmazonで見る
カテゴリの一覧へ
新着記事
New1
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New2
Spring
SpringDataJPAのJPAクエリメソッド「StartingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New3
Spring
SpringDataJPAのJPAクエリメソッド「NotLike」の使い方を完全ガイド!初心者向け解説
更新記事
New4
Spring
SpringDataJPAのJPAクエリメソッド「Like」の使い方を完全ガイド!初心者向け解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Java
JavaのBooleanクラスの使い方を完全ガイド!初心者でもわかる真偽値の操作
No.3
Java&Spring記事人気No3
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.4
Java&Spring記事人気No4
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.5
Java&Spring記事人気No5
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.6
Java&Spring記事人気No6
JSP
JSPでif文・for文を使う方法!初心者でもわかるJavaとの違いと使い方
No.7
Java&Spring記事人気No7
Spring
SpringのModelクラスとaddAttributeメソッドの使い方を完全ガイド!初心者でも安心
No.8
Java&Spring記事人気No8
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説