ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|---|
|
基本的な使い方
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
// /api/users/123 → id = 123
return userService.findById(id);
}
}
Spring が URL の {id} 部分を変数として受け取り、メソッド引数に注入します。型変換は自動(String → Long, Integer, UUID 等)。
複数のパス変数
@GetMapping("/{userId}/posts/{postId}")
public Post getPost(
@PathVariable Long userId,
@PathVariable Long postId
) {
// /api/users/1/posts/42 → userId=1, postId=42
return postService.findByUserAndPost(userId, postId);
}
パス変数名と引数名が異なる場合
@GetMapping("/{user-id}")
public User getUser(@PathVariable("user-id") Long id) {
// ハイフン入り変数名は Java 識別子にできないので明示
return userService.findById(id);
}
// 別名で受け取りたい場合
@GetMapping("/{id}")
public User getUser(@PathVariable("id") Long userId) {
return userService.findById(userId);
}
正規表現で制約
@GetMapping("/{id:[0-9]+}")
public User getById(@PathVariable Long id) {
// 数字のみマッチ (/api/users/abc は 404)
return userService.findById(id);
}
@GetMapping("/{slug:[a-z0-9-]+}")
public User getBySlug(@PathVariable String slug) {
// 小文字英数字 + ハイフンのみ (slug)
return userService.findBySlug(slug);
}
@GetMapping("/{uuid:[0-9a-f-]{36}}")
public User getByUuid(@PathVariable String uuid) {
// UUID 形式のみ
return userService.findByUuid(uuid);
}
Map で全部受け取る
@GetMapping("/{userId}/posts/{postId}/comments/{commentId}")
public Comment get(@PathVariable Map<String, String> pathVars) {
Long userId = Long.parseLong(pathVars.get("userId"));
Long postId = Long.parseLong(pathVars.get("postId"));
Long commentId = Long.parseLong(pathVars.get("commentId"));
return commentService.find(userId, postId, commentId);
}
オプショナルなパス変数
パス変数自体はオプショナルにできません(URL パターンで吸収するか、別エンドポイントを用意)。代替: クエリパラメータで @RequestParam(required = false)。
// パス変数の有無で別メソッド
@GetMapping("/users")
public List<User> listAll() {
return userService.findAll();
}
@GetMapping("/users/{id}")
public User getOne(@PathVariable Long id) {
return userService.findById(id);
}
// あるいは URL パターン両方マッチ (Spring 5.3+ で {*path} は可変パス)
@GetMapping({"/users", "/users/{id}"})
public Object users(@PathVariable Optional<Long> id) {
return id.map(userService::findById)
.map(Object.class::cast)
.orElse(userService.findAll());
}
型変換
String → 各種型への変換が自動で行われます:
| 型 | 変換 |
|---|---|
Long / Integer | 標準 |
UUID | 標準 |
enum | 標準(名前 or @JsonValue) |
LocalDate / LocalDateTime | @DateTimeFormat 必要 |
| カスタム型 | Converter<String, T> 実装 |
@GetMapping("/{date}")
public Report getDaily(
@PathVariable @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date
) {
// /api/reports/2026-05-15 → date = 2026-05-15
return reportService.byDate(date);
}
// カスタム enum
public enum UserRole { ADMIN, USER, GUEST }
@GetMapping("/role/{role}")
public List<User> byRole(@PathVariable UserRole role) {
// /api/users/role/ADMIN → role = UserRole.ADMIN
return userService.findByRole(role);
}
エラーハンドリング
型変換失敗
/api/users/abc のように Long に変換できない場合、デフォルトでは 400 Bad Request + MethodArgumentTypeMismatchException。
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentTypeMismatchException.class)
public ResponseEntity<ErrorResponse> handle(MethodArgumentTypeMismatchException ex) {
ErrorResponse err = new ErrorResponse(
"INVALID_PATH_VARIABLE",
"Invalid value for path variable: " + ex.getName()
);
return ResponseEntity.badRequest().body(err);
}
}
@PathVariable vs @RequestParam vs @RequestBody
| 使う場面 | アノテーション | URL 例 |
|---|---|---|
| リソースの ID(必須) | @PathVariable | /users/123 |
| フィルタ・ページング(オプショナル) | @RequestParam | /users?status=active&page=2 |
| 大量データ・POST ボディ | @RequestBody | POST /users + JSON ボディ |
関連記事
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?