🕋

[Spring]アノテーション

に公開

アノテーションの例

アノテーション 説明
@Controller クラスをコントローラーとして定義
@GetMapping, @PostMapping, @PutMapping, @PatchMapping, @DeleteMapping 特定のHTTPメソッドを処理
@RequestParam クエリパラメータを取得
@PathVariable URLのパス変数を取得
@ModelAttribute リクエストデータをオブジェクトにバインド

@Controller

@Controllerはクラスに付与して、そのクラスがWebリクエストを受け取るコントローラーであることを示します。戻り値は通常View名(HTMLなど)を返します。

@GetMapping

@GetMappingは、HTTP GETリクエストに対する処理を定義するアノテーションです。

@GetMapping("/users")
public String listUsers(Model model) {
    return "userList";
}

@PostMapping

@PostMappingは、HTTP POSTリクエストに対する処理を定義するアノテーションです。

@PostMapping("/contact")
public String createPage(@RequestParam String title, Model model) {
	model.addAttribute("title", title);
	return "article_created";
}

@PutMapping

@PutMappingはHTTPのPUTリクエストにマッピングするアノテーションです。
主にリソース全体の更新(完全上書き)に使います。
全てのフィールドを受け取ることを想定しており、未指定の場合はnullで上書きされる可能性があります。

@PutMapping("/user/{id}")
public String updateUser(@PathVariable int id, @ModelAttribute User user) {
    // データを更新するコード
}

@PatchMapping

@PatchMappingはHTTPのPATCHリクエストにマッピングするアノテーションです。
主にリソースの一部の更新に使用されます。
更新したいデータのみ送信し既存のデータから差し替えます。

@PatchMapping("/user/{id}")
public String patchUser(@PathVariable int id, @RequestParam("name") String name) {
    // 指定されたnameだけを更新する
    userService.updateName(id, name); // 名前を更新
    //ユーザーの詳細ページ(/user/{id})にリダイレクトする。
    //redirect: を付けると SpringがHTTPリダイレクトを行う。
    return "redirect:/user/" + id;
}

@DeleteMapping

@DeleteMappingはHTTPのDELETEリクエストにマッピングするアノテーションです。
リソースの削除処理に使用します。

@DeleteMapping("/user/{id}")
public String deleteUser(@PathVariable int id) {
    // IDでユーザーを削除するコード
}

@RequestParam

@RequestParamは、リクエストのクエリパラメータやフォームパラメータを取得するためのアノテーションです。
/search?keyword=springというURLが呼び出されたときに、keywordの値を取得できます。

@GetMapping("/search")
public String search(@RequestParam("keyword") String keyword, Model model) {
    model.addAttribute("keyword", keyword);
    return "result";
}

以下のようにオプションを設定することも可能です。

  • required = false:パラメータが必須ではない場合
  • defaultValue = "default":パラメータが未指定時のデフォルト値
@GetMapping("/search")
public String search(
    @RequestParam(name = "keyword", required = false) String keyword,
    @RequestParam(name = "name", defaultValue = "spring") String name,
    Model model
) {
    model.addAttribute("keyword", keyword);
    model.addAttribute("name", name);
    return "result";
}

@PathVariable

@PathVariableは、URLの一部(パス)から変数を抽出するためのアノテーションです。
/user/5のようなURLで5を取得したい場合に使用します。

@GetMapping("/user/{id}")
public String userDetail(@PathVariable("id") int id, Model model) {
    model.addAttribute("userId", id);
    return "userDetail";
}

@ModelAttribute

@ModelAttributeは、フォームなどから送られてくる値をJavaオブジェクトに自動的にバインドするアノテーションです。

// User.java
public class User {
    private String name;
    private int age;
    // ゲッター・セッター
}

// コントローラ
@PostMapping("/register")
public String register(@ModelAttribute User user) {
    // 自動でリクエストパラメータ(name, age)をUserオブジェクトにマッピング
    // 例: name=太郎&age=20 → user.setName("太郎"), user.setAge(20)
    return "result";
}

Discussion