1. test 1
  2. test 2
  3. test 3
  4. test 4
コース一覧
Spring Boot入門
@GetMappingとパス変数

Spring Boot入門

Java で Web API サーバーを作るための Spring Boot の入門コースです。DI コンテナ、REST コントローラ、リクエスト検証、レイヤ分割、Spring Data JPA、例外ハンドリング、テストまでを扱います。毎レッスン、Spring が裏側でやっている判断そのものを pure Java の関数として自分で書き、フレームワークが何を肩代わりしてくれているのかを手触りで理解できる構成にしました。約 12 時間 (1 日 30 分 × 24 日) で 48 レッスンを修了できます。

1
Spring Bootとは何か
01. Spring Bootで何が作れるのか10分
02. サーブレットからフレームワークへ15分
03. ルーティング表という発想15分
04. プロジェクトの構成10分
05. 起動のしくみと自動設定15分
06. パスのマッチング15分
2
DIコンテナ
01. newで書くと何が困るのか15分
02. コンストラクタインジェクション15分
03. インターフェースへの依存15分
04. @Componentと@Bean15分
05. 自作のDIコンテナ20分
06. Beanのスコープとライフサイクル15分
3
RESTコントローラ
01. RESTという設計方針15分
02. @RestControllerの役割15分
03. @GetMappingとパス変数15分
04. クエリパラメータの受け取り15分
05. @PostMappingとリクエストボディ15分
06. ステータスコードの選び方15分
07. ResponseEntityで組み立てる15分
4
リクエストとレスポンスの変換
01. JSONとオブジェクトの往復15分
02. DTOとエンティティを分ける15分
03. recordでDTOを書く15分
04. 入力検証の基本15分
05. 検証エラーをまとめて返す15分
06. アノテーションによる検証15分
5
レイヤ構成とビジネスロジック
01. 3層アーキテクチャ10分
02. @Serviceに置くもの15分
03. 状態遷移をルールにする15分
04. 料金計算のような業務ロジック15分
05. @Transactionalとは何か15分
06. トランザクションの巻き戻し15分
6
データアクセス
01. @Entityとテーブルの対応15分
02. リポジトリという抽象15分
03. メソッド名からクエリを作る20分
04. 検索条件の組み立て15分
05. ページングと並び替え15分
06. N+1問題15分
7
例外処理と横断的関心事
01. 例外をHTTPに変換する15分
02. @ExceptionHandlerと@ControllerAdvice15分
03. エラーレスポンスの形を決める15分
04. フィルタとインターセプタ15分
05. ログとリクエストの追跡15分
06. 設定値の外部化15分
8
テストと仕上げ
01. テストの種類と使い分け15分
02. Serviceの単体テスト15分
03. モックで依存を差し替える15分
04. MockMvcでエンドポイントを試す15分
05. 本番へ出すための次の一歩10分

@GetMappingとパス変数

このレッスンでは、@GetMapping でパスを対応づけ、@PathVariable でパスの一部を引数として受け取れるようになります。

@GetMapping はパスとメソッドの対応づけ

@GetMapping("/users") は「GET メソッドで /users に来たリクエストを、このメソッドで処理する」という宣言です。@RequestMapping(method = RequestMethod.GET, path = "/users") の短縮形で、実務ではほぼ短い方だけを使います。POST / PUT / DELETE / PATCH にもそれぞれ対応するアノテーションがあります。

Java

@RestController @RequestMapping("/users") public class UserController { @GetMapping public List<UserResponse> list() { ... } @GetMapping("/{id}") public UserResponse get(@PathVariable Long id) { ... } }

波かっこがパス変数

/{id} の波かっこは「ここは何が来てもよい、その値を id という名前で覚えておく」という意味です。/users/12 に来れば id は 12、/users/999 に来れば id は 999 になります。この覚えた値をメソッドの引数として受け取るのが @PathVariable です。

Java

@GetMapping("/{id}") public UserResponse get(@PathVariable Long id) { ... }

パスの中の名前と引数名が同じなら、そのまま結びつきます。名前を変えたい場合は @PathVariable("id") Long userId のように、対応させたいパス変数名を明示します。

ここで注目したいのが型変換です。URL の中身は文字列でしかありませんが、引数の型を Long にしておくと Spring が数値へ変換してくれます。数値にできない値、たとえば /users/abc が来た場合は変換に失敗し、既定では 400 が返ります。

複数のパス変数

階層のあるリソースでは、パス変数が 2 つ以上になります。

Java

@GetMapping("/{userId}/orders/{orderId}") public OrderResponse getOrder(@PathVariable Long userId, @PathVariable Long orderId) { ... }

/users/12/orders/34 というリクエストで userId が 12、orderId が 34 になります。所属関係をパスの階層で表せるのが REST の分かりやすいところです。

パス変数とクエリパラメータの使い分け

置き場所書き方何を表すか
パス変数/users/12どのリソースかを一意に決めるもの
クエリパラメータ/users?page=2絞り込み・並び順・ページングなど、表現の調整

迷ったら「これが変わると別のリソースになるか」と考えます。ID が変われば別の人なのでパスに置きます。ページ番号が変わっても対象の集合は同じなのでクエリに置きます。

見つからなかったときをどうするか

/users/999 のように、形式は正しいけれど該当データが無い場合があります。この場合は 404 を返すのが素直です。Spring では例外を投げて、後のレッスンで扱う例外ハンドラで 404 に変換する、という形が一般的です。

Java

@GetMapping("/{id}") public UserResponse get(@PathVariable Long id) { return repository.findById(id) .map(UserResponse::from) .orElseThrow(() -> new UserNotFoundException(id)); }

大事なのは、存在しないことは異常ではなく想定内という点です。あらかじめ分岐を用意しておかないと、null がそのまま流れて別の場所で落ちます。

演習で確かめます

Spring では @PathVariable が URL から ID を切り出して型変換までやってくれます。ここではその先の部分、つまり「取り出した ID でデータを引き、あればその表現を、無ければ見つからなかったことを返す」という判断を自分で書きます。Map を疑似的なデータ置き場として使ってください。

要件

  1. 疑似データを Map で用意し、1 は taro、2 は hanako、12 は sato とすること
  2. 存在する id では id,名前 の形の文字列を返すこと
  3. 存在しない id では not-found を返すこと

入出力例

findUser(1) → "1,taro" findUser(12) → "12,sato" findUser(2) → "2,hanako" findUser(999) → "not-found"

ヒント

Map<Integer, String> を作って put で 3 件入れておきます

containsKey で存在を確かめるか、get の戻りが null かどうかで分岐します

戻り値は id + "," + name の形で組み立てます

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/09

関連レッスン

  • クエリパラメータの受け取り

    クエリ文字列の解析と既定値の適用を実装します。

  • @PostMappingとリクエストボディ

    受け取った内容から新しいリソースの表現を組み立てます。

  • ステータスコードの選び方

    操作と結果から適切なステータスコードを決められるようになります。

  • ResponseEntityで組み立てる

    本文とステータスとヘッダを一体で返す形を実装します。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • 引数位置引数=順番で渡す。
  • メソッドクラスに属する関数
  • リクエストWeb 通信の基本単位、ブラウザの問い合わせとサーバーの返答
  • 処理計算や代入を表す長方形
  • 変数データに名前をつけて参照する仕組み
  • 型変換あるデータ型を別の型に変換すること。
  • URLページの住所全体
  • 階層ネットワークを役割ごとに積み重ねた構造
main.java
学習モード
エディタを読み込んでいます

メモ

@GetMappingとパス変数

⌘S で保存