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

@RequestParamと@PathVariableの違いと使い方を完全ガイド!初心者でも理解できるSpring Bootルーティング

@RequestParam, @PathVariable の違いと使い方
@RequestParam, @PathVariable の違いと使い方

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

新人

「Spring BootでWebページを作ろうとしているんですが、@RequestParam@PathVariableって何に使うんですか?」

先輩

「簡単に言うと、@RequestParamはURLのパラメータを取得するために使って、@PathVariableはURLの一部を変数として取得するために使うんだ。」

新人

「なるほど!でも、具体的にどうやって使うんですか?実際のコードが見たいです。」

先輩

「じゃあ、基本的な使い方を詳しく説明していくよ!」

1. @RequestParamとは?

1. @RequestParamとは?
1. @RequestParamとは?

@RequestParamは、URLに含まれるパラメータ(クエリパラメータ)を取得するためのアノテーションです。例えば、検索機能やフォーム入力のデータを受け取るときに使います。URLの末尾に?key=valueの形式でパラメータが付いているときに役立ちます。

【使用例】


package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class QueryController {

    @GetMapping("/search")
    public String search(@RequestParam("keyword") String keyword, Model model) {
        model.addAttribute("result", "検索ワード:" + keyword);
        return "searchResult"; // resources/templates/searchResult.html を表示
    }
}

コードの説明:

  • @GetMapping("/search"):ブラウザで/searchにアクセスしたときにこのメソッドが呼ばれます。
  • @RequestParam("keyword"):URLのクエリパラメータからkeywordの値を取得します。
  • model.addAttribute("result", "検索ワード:" + keyword);:HTMLにデータを渡します。

■ 実行例

以下のURLにアクセスした場合:


http://localhost:8080/search?keyword=Spring

画面に次のように表示されます。


検索ワード:Spring

■ ポイント

  • フォームからのデータ送信に便利です。
  • クエリパラメータを簡単に取得できます。
  • パラメータ名を変更するときは、@RequestParam("新しい名前")を設定します。

2. @PathVariableとは?

2. @PathVariableとは?
2. @PathVariableとは?

@PathVariableは、URLの一部を変数として取得するためのアノテーションです。RESTfulなURL設計に使われ、リソースを特定する際に便利です。例えば、記事のIDやユーザーのIDをURLで指定したいときに活用できます。

【使用例】


package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@Controller
public class PathController {

    @GetMapping("/user/{id}")
    public String getUser(@PathVariable("id") int id, Model model) {
        model.addAttribute("userInfo", "ユーザーID:" + id);
        return "userProfile"; // resources/templates/userProfile.html を表示
    }
}

コードの説明:

  • @GetMapping("/user/{id}"):URLに含まれる{id}の部分が変数として扱われます。
  • @PathVariable("id"):URLからidの値を取得します。
  • model.addAttribute("userInfo", "ユーザーID:" + id);:HTMLにデータを渡します。

■ 実行例

以下のURLにアクセスした場合:


http://localhost:8080/user/5

画面に次のように表示されます。


ユーザーID:5

■ ポイント

  • URLパスの変数を取得できるため、リソース指定に便利です。
  • ブログ記事のIDや商品コードの取得などに使用されます。
  • @RequestParamと違い、クエリパラメータは不要です。

3. @RequestParamの基本的な使い方とコード例

3. @RequestParamの基本的な使い方とコード例
3. @RequestParamの基本的な使い方とコード例

@RequestParamは、WebアプリケーションでユーザーがフォームやURLのクエリパラメータからデータを送信する際に、その値を取得するためのアノテーションです。ユーザーが入力した値を取得し、処理に活用できます。

例えば、検索機能やフィルター機能、ページネーションなどで利用されます。以下では、ユーザー名と年齢を受け取って画面に表示する簡単な例を紹介します。

■ コード例(ユーザー情報の取得)


package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class UserInfoController {

    @GetMapping("/userinfo")
    public String getUserInfo(@RequestParam("name") String name,
                              @RequestParam(value = "age", required = false, defaultValue = "未入力") String age,
                              Model model) {
        model.addAttribute("userName", name);
        model.addAttribute("userAge", age);
        return "userInfo"; // resources/templates/userInfo.html を表示
    }
}

■ 実行例

以下のURLにアクセスします。


http://localhost:8080/userinfo?name=田中&age=30

画面表示:


名前:田中  
年齢:30

ポイント:

  • @RequestParam("name")で、URLのnameパラメータを取得します。
  • @RequestParam(value = "age", required = false, defaultValue = "未入力")は、ageが指定されていない場合に「未入力」を表示します。
  • フォームからも同様にデータを受け取れます。

4. @PathVariableの基本的な使い方とコード例

4. @PathVariableの基本的な使い方とコード例
4. @PathVariableの基本的な使い方とコード例

@PathVariableは、URLパスの一部を変数として取得できるアノテーションで、特にリソース識別に使用されます。例えば、ユーザーIDや記事IDをURLで指定して取得する場合に便利です。

■ コード例(ユーザー詳細ページ)


package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@Controller
public class UserProfileController {

    @GetMapping("/profile/{userId}")
    public String getProfile(@PathVariable("userId") int userId, Model model) {
        model.addAttribute("profileInfo", "ユーザーID:" + userId + " のプロフィール情報");
        return "profile"; // resources/templates/profile.html を表示
    }
}

■ 実行例

以下のURLにアクセスします。


http://localhost:8080/profile/42

画面表示:


ユーザーID:42 のプロフィール情報

ポイント:

  • @PathVariable("userId")でURLの一部を取得します。
  • URL構造がわかりやすく、RESTful APIの設計に適しています。
  • ユーザー情報や記事情報など、特定リソースを扱う際に便利です。

5. 両者の違いと使い分けのポイント

5. 両者の違いと使い分けのポイント
5. 両者の違いと使い分けのポイント

@RequestParam@PathVariableはどちらもパラメータ取得に使いますが、用途やURL設計の考え方が異なります。以下に主な違いと使い分けのポイントをまとめました。

■ 比較表

項目 @RequestParam @PathVariable
取得方法 URLのクエリパラメータから取得 URLパスの一部から取得
主な用途 検索・フィルタリング・ページネーション リソース識別(ユーザーID・記事ID)
URL例 /search?keyword=Java /user/10
特徴 複数のオプション指定に便利 URLがシンプルでRESTful設計に最適
可読性 やや低い 高い

■ 使い分けのポイント

  • 検索機能@RequestParamが便利。複数条件指定が可能。
  • リソース参照@PathVariableが適切。URLがわかりやすくなります。
  • 組み合わせ使用:必要に応じて両方を同時に使うことも可能。

■ 両方を組み合わせたコード例


package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class CombinedController {

    @GetMapping("/product/{productId}")
    public String getProductDetails(@PathVariable("productId") int productId,
                                    @RequestParam(value = "review", required = false, defaultValue = "false") String review,
                                    Model model) {
        model.addAttribute("productInfo", "商品ID:" + productId);
        model.addAttribute("reviewFlag", "レビュー表示:" + ("true".equals(review) ? "あり" : "なし"));
        return "productDetail"; // resources/templates/productDetail.html を表示
    }
}

■ 実行例

以下のURLにアクセスします。


http://localhost:8080/product/100?review=true

画面表示:


商品ID:100  
レビュー表示:あり

ポイント:

  • リソース特定に@PathVariable、オプション指定に@RequestParamを使用。
  • 柔軟で拡張性のあるルーティング設計が可能。

6. 実践!簡単なWebアプリケーションを作って違いを体感

6. 実践!簡単なWebアプリケーションを作って違いを体感
6. 実践!簡単なWebアプリケーションを作って違いを体感

ここでは、@RequestParam@PathVariableの違いを実際に体験できる簡単なWebアプリケーションを作成します。このアプリでは、商品情報を表示し、クエリパラメータでオプション情報を受け取る機能を実装します。

■ プロジェクト作成手順(Pleiades使用)

  1. Pleiadesを起動し、「新規プロジェクト作成」を選択します。
  2. 「Spring Starter Project」を選択し、以下を設定します。
    • プロジェクト名:ProductApp
    • パッケージ名:com.example.productapp
  3. 依存関係の選択で以下にチェックを入れます。
    • Spring Web(Webアプリ開発用)
    • Thymeleaf(テンプレートエンジン)
  4. 「完了」をクリックしてプロジェクトを作成します。

■ コントローラーコード(ProductController.java)


package com.example.productapp.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class ProductController {

    @GetMapping("/product/{id}")
    public String getProduct(@PathVariable("id") int id,
                             @RequestParam(value = "showDetails", required = false, defaultValue = "false") String showDetails,
                             Model model) {
        model.addAttribute("productId", id);
        model.addAttribute("details", "true".equals(showDetails) ? "商品の詳細情報が表示されます。" : "詳細は非表示です。");
        return "product";
    }
}

■ HTMLコード(product.html)


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>商品情報</title>
</head>
<body>
    <h1>商品情報</h1>
    <p>商品ID:<span th:text="${productId}"></span></p>
    <p><span th:text="${details}"></span></p>
    <a href="/product/101?showDetails=true">詳細を表示</a> |
    <a href="/product/101?showDetails=false">詳細を非表示</a>
</body>
</html>

■ 実行手順

  1. ProductAppApplication.javaを右クリックし、「Spring Boot アプリケーションの実行」を選択します。
  2. ブラウザで以下にアクセスします。
    • http://localhost:8080/product/101
    • http://localhost:8080/product/101?showDetails=true

■ 実行結果

URL: http://localhost:8080/product/101


商品ID:101
詳細は非表示です。

URL: http://localhost:8080/product/101?showDetails=true


商品ID:101
商品の詳細情報が表示されます。

■ ポイント

  • @PathVariableで商品IDをURLパスから取得します。
  • @RequestParamで詳細表示の有無をクエリパラメータから取得します。
  • 両方を組み合わせることで柔軟なURL設計が可能です。

7. よくあるエラーとその解決方法

7. よくあるエラーとその解決方法
7. よくあるエラーとその解決方法

@RequestParam@PathVariableを使う際、初心者がつまずきやすいエラーとその解決方法を解説します。

■ エラー1:MissingServletRequestParameterException

原因: 必須の@RequestParamがURLに指定されていない。


@GetMapping("/search")
public String search(@RequestParam("keyword") String keyword) {
    return "result";
}

アクセス例(エラーになるURL): http://localhost:8080/search

■ 解決方法

  • required = falseを指定する。
  • defaultValueを設定してデフォルト値を用意する。

@GetMapping("/search")
public String search(@RequestParam(value = "keyword", required = false, defaultValue = "未指定") String keyword) {
    return "result";
}

■ エラー2:IllegalArgumentException: Missing path variable

原因: URLに@PathVariableが指定されていない。


@GetMapping("/user/{id}")
public String getUser(@PathVariable("id") int id) {
    return "user";
}

アクセス例(エラーになるURL): http://localhost:8080/user/

■ 解決方法

  • URLパスに変数を必ず含める。
  • デフォルトURLを用意し、ユーザーが直接アクセスしてもエラーにならないようにする。

@GetMapping("/user/{id}")
public String getUser(@PathVariable("id") int id) {
    return "user";
}

@GetMapping("/user")
public String userDefault() {
    return "redirect:/user/1";
}

■ エラー3:型変換エラー(TypeMismatchException)

原因: 期待される型とURLパラメータの型が一致しない。


@GetMapping("/product/{id}")
public String getProduct(@PathVariable("id") int id) {
    return "product";
}

アクセス例(エラーになるURL): http://localhost:8080/product/abc

■ 解決方法

  • URLのパラメータ型を正しく指定する。
  • 型変換が必要な場合は事前にバリデーションを実施する。

8. 次の学習ステップとおすすめの勉強方法

8. 次の学習ステップとおすすめの勉強方法
8. 次の学習ステップとおすすめの勉強方法

@RequestParam@PathVariableの基本を理解したら、次のステップとして以下の内容に進むことをおすすめします。

■ 学習ステップ

  1. フォーム処理の詳細: フォームバリデーションやエラーメッセージの表示方法。
  2. Thymeleafの活用: 条件分岐やループを使った動的ページの作成。
  3. Spring Data JPAとの連携: データベースと連携し、データの保存や取得を学ぶ。
  4. エラーハンドリング: @ControllerAdviceを使った例外処理。
  5. セキュリティ対策: Spring Securityを用いた認証・認可の基本。

■ おすすめの勉強方法

  • 小さなアプリを自作して、実際に手を動かして学ぶ。
  • 公式ドキュメントを読むことで最新情報をキャッチアップ。
  • 学習記録としてブログを書くと理解が深まります。
  • 疑問があれば、Stack OverflowやGitHubで質問・調査。

まとめ

まとめ
まとめ

本記事では、Spring BootのWebアプリケーション開発におけるルーティング処理に欠かせないアノテーションである@RequestParam@PathVariableの違いと使い方を徹底的に解説しました。@RequestParamはURLに含まれるクエリパラメータから値を取得し、検索条件やオプション情報の受け取りに便利です。一方で、@PathVariableはURLパスの一部から値を取得し、リソースの識別やID指定などに適したアノテーションです。

それぞれのアノテーションは使用目的に応じて選択する必要があり、例えば検索機能やフィルター処理には@RequestParam、ユーザーIDや商品IDといった個別リソースを指定する場合には@PathVariableが効果的です。また、これらを組み合わせることで、RESTfulで可読性の高いURL設計が可能となり、柔軟で拡張性のあるWebアプリケーション開発を実現できます。

さらに、よくあるエラーとその解決方法を紹介することで、初心者でもつまずかずに実装できるよう配慮しました。実際のプロジェクトでありがちなMissingServletRequestParameterExceptionTypeMismatchExceptionなどに対する具体的な対処方法を提示し、開発現場で役立つ知識として落とし込んでいます。

本記事を通じて、Spring Bootでのルーティング設計における基本的な考え方、設計パターン、そしてそれぞれのアノテーションの役割を明確に理解できたはずです。特に、リソース志向の開発においては@PathVariableを活用することで、URL構造がシンプルで直感的になり、保守性も向上します。一方で、柔軟にユーザー指定の情報を受け取る場面では@RequestParamの使いこなしが求められます。

今後、Spring Bootのより高度な機能であるバリデーション、データベース連携、認証・認可機構などを学んでいく際にも、この基礎知識は不可欠です。しっかりと身につけておくことで、よりスムーズに応用へとステップアップできるでしょう。

最後に、これらのアノテーションを使った実装を日々の学習や小規模なWebアプリケーションで実践することで、理解がより深まり定着していきます。以下はその学びの実践例のひとつです。

■ 練習コード例:@PathVariableと@RequestParamを組み合わせた実装


package com.example.practice.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class SampleController {

    @GetMapping("/order/{orderId}")
    public String getOrderDetail(@PathVariable("orderId") int orderId,
                                 @RequestParam(value = "showStatus", required = false, defaultValue = "false") String showStatus,
                                 Model model) {
        model.addAttribute("orderId", orderId);
        model.addAttribute("status", "true".equals(showStatus) ? "注文ステータス:配送中" : "ステータス非表示");
        return "orderDetail"; // resources/templates/orderDetail.html を表示
    }
}
先生と生徒の振り返り会話

生徒

今日は@RequestParam@PathVariableの違いや使い方を、実例付きで理解できました!

先生

いいね!それぞれの特徴をしっかり把握できたかな?使い分けができるとURL設計がきれいになるよ。

生徒

はい!@RequestParamは検索条件やオプションに使って、@PathVariableはIDとかリソース指定に使うと便利なんですね。

先生

その通り!URLの可読性やメンテナンス性にも関わってくるから、今のうちにしっかり身につけておこう。

生徒

はい、実際にコードを書いて何度も試してみます!ありがとうございました!

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

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

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

@RequestParamとは何ですか?初心者でも使える方法を教えてください

@RequestParamはSpring BootでURLのクエリパラメータを取得するために使うアノテーションです。検索機能やフォーム送信などで、ユーザーが入力した値を受け取るのに便利です。

@PathVariableとは?Spring Bootでの使い方がよくわかりません

@PathVariableは、URLの一部を変数として取得するためのアノテーションで、リソースのID指定などに使います。REST APIで頻繁に使われる記述方法です。
コメント
コメント投稿は、ログインしてください

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

カテゴリの一覧へ
新着記事
New1
SpringのDB操作
JdbcTemplateのqueryとqueryForObjectを完全解説!初心者でもわかるデータ取得の基本
New2
Thymeleaf
Thymeleaf th:replaceの使い方と応用例を初心者向けに徹底解説!
New3
Thymeleaf
Thymeleafのth:checkedでチェックボックス制御をマスター!初心者向けガイド
New4
Thymeleaf
初心者向けにThymeleaf th:onclickの書き方!JavaScript連携を簡単に
人気記事
No.1
Java&Spring記事人気No1
SpringのAPI開発(REST & GraphQL)
REST APIの主要なHTTPメソッド(GET, POST, PUT, DELETE)を初心者向けにわかりやすく解説!
No.2
Java&Spring記事人気No2
Thymeleaf
Thymeleaf とは?初心者向けにThymeleafの基本を徹底解説
No.3
Java&Spring記事人気No3
Spring認証(Spring Security)
セッション管理の基本(@SessionAttributes)を完全解説!初心者でもわかるセッションの仕組み
No.4
Java&Spring記事人気No4
SpringのWeb開発(Spring MVC)
@RequestMappingの基本を完全ガイド!初心者でもわかるルーティングの仕組み
No.5
Java&Spring記事人気No5
Thymeleaf
Thymeleaf if elseの書き方と条件分岐の活用法!初心者でもわかる使いこなしガイド
No.6
Java&Spring記事人気No6
SpringのWeb開発(Spring MVC)
DispatcherServletの仕組みを理解する!初心者向け完全ガイド
No.7
Java&Spring記事人気No7
SpringのWeb開発(Spring MVC)
Spring MVC入門(概要とアーキテクチャ)
No.8
Java&Spring記事人気No8
Spring認証(Spring Security)
CSRFトークンの仕組みと動作をわかりやすく解説!Spring Securityの基本