カテゴリ: SpringのAPI開発(REST & GraphQL) 更新日: 2026/04/03

@RequestMappingとHTTPメソッドの使い分けを解説!Springコントローラの基本を初心者向けに紹介

@RequestMappingとHTTPメソッドの使い分け
@RequestMappingとHTTPメソッドの使い分け

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

新人

「SpringでURLに応じて処理を分けたいんですが、@RequestMappingって何をするアノテーションなんですか?」

先輩

「@RequestMappingは、リクエストされたURLやHTTPメソッドに応じて処理を振り分けるためのアノテーションだよ。Springコントローラでは基本中の基本だね。」

新人

「なるほど!でも、GETとかPOSTってどうやって使い分けるんですか?」

先輩

「いいところに気がついたね。それじゃ、@RequestMappingの基本とHTTPメソッドの使い分けについて詳しく解説していこう。」

1. @RequestMappingとは?(基本的な意味と役割)

1. @RequestMappingとは?(基本的な意味と役割)
1. @RequestMappingとは?(基本的な意味と役割)

Springの@RequestMappingアノテーションは、WebアプリケーションでURLパスに応じた処理をコントローラに振り分けるために使います。Spring MVCのルーティングの中心的な存在です。 @Controllerを付けたクラス内で、どのURLでどのメソッドを呼び出すかを指定することで、ユーザーの操作に応じた処理を簡単に実現できます。

以下は、基本的な@RequestMappingの使い方です。


@Controller
public class HelloController {

    @RequestMapping("/hello")
    public String sayHello() {
        return "hello";
    }
}

上記の例では、ユーザーが/helloというパスにアクセスすると、sayHelloメソッドが呼ばれ、「hello」というビューが返されます。このように、@RequestMappingはURLと処理のマッピングを行う役割を持ちます。

2. SpringでHTTPメソッド(GET・POSTなど)を使い分ける理由

2. SpringでHTTPメソッド(GET・POSTなど)を使い分ける理由
2. SpringでHTTPメソッド(GET・POSTなど)を使い分ける理由

Webアプリケーションでは、同じURLでも操作の目的によって処理を変える必要があります。そのために使うのがHTTPメソッドです。
Springでは、@RequestMappingのmethod属性を指定することで、GETやPOSTといったメソッドごとに処理を振り分けることができます。

HTTPメソッドは以下のように使い分けます:

  • GET:データの取得(例:一覧表示)
  • POST:データの作成(例:フォーム送信)
  • PUT:データの更新
  • DELETE:データの削除

実際のコードで、GETとPOSTの違いを見てみましょう。


@Controller
public class UserController {

    // ユーザー登録フォームの表示(GET)
    @RequestMapping(value = "/register", method = RequestMethod.GET)
    public String showForm() {
        return "registerForm";
    }

    // ユーザー登録処理(POST)
    @RequestMapping(value = "/register", method = RequestMethod.POST)
    public String registerUser(User user) {
        // 登録処理
        return "registerSuccess";
    }
}

このように、同じ/registerというURLでも、GETメソッドではフォームを表示し、POSTメソッドではフォーム送信後の処理を行うように使い分けます。
これはRESTfulな設計の基本であり、Springコントローラの実装においてとても重要な考え方です。

特に初心者が注意すべきなのは、GETとPOSTを正しく分けないと、意図しないデータの書き換えやセキュリティ上のリスクを引き起こす可能性がある点です。
そのため、method属性をしっかりと指定して、リクエストの目的に合わせた処理を記述することが大切です。

3. @RequestMappingの基本的な使い方(value属性・method属性)

3. @RequestMappingの基本的な使い方(value属性・method属性)
3. @RequestMappingの基本的な使い方(value属性・method属性)

Springの@RequestMappingには、リクエストのURLを指定するためのvalue属性と、HTTPメソッドを指定するためのmethod属性があります。
value属性はどのパスでリクエストが来たときに、そのメソッドを実行するかを定義します。
method属性は、そのURLに対してどのHTTPメソッド(GET・POSTなど)でアクセスされたときに処理するかを指定します。

以下に、value属性とmethod属性を組み合わせたシンプルな例を紹介します。


@Controller
public class SampleController {

    @RequestMapping(value = "/sample", method = RequestMethod.GET)
    public String showSamplePage() {
        return "sample";
    }
}

上記のコードでは、ユーザーが/sampleというURLにGETメソッドでアクセスした場合のみ、showSamplePageメソッドが実行されます。
つまり、value属性は「どこにアクセスするか」、method属性は「どういう方法でアクセスするか」を判断するために使います。

4. method属性によるHTTPメソッドの明示的な指定(GET・POST・PUT・DELETE)

4. method属性によるHTTPメソッドの明示的な指定(GET・POST・PUT・DELETE)
4. method属性によるHTTPメソッドの明示的な指定(GET・POST・PUT・DELETE)

HTTPメソッドを正確に指定することで、URLが同じでも処理を分けることができます。
例えば、ユーザー情報の表示はGET、追加はPOST、更新はPUT、削除はDELETEというように、それぞれ適切なHTTPメソッドを使い分けることで、システムの設計が明確になります。

下記のように、ひとつのコントローラ内で複数のHTTPメソッドを使い分ける例を見てみましょう。


@Controller
public class UserController {

    // ユーザー情報の取得(GET)
    @RequestMapping(value = "/user", method = RequestMethod.GET)
    public String getUser() {
        return "userDetail";
    }

    // ユーザー情報の新規作成(POST)
    @RequestMapping(value = "/user", method = RequestMethod.POST)
    public String createUser(User user) {
        return "userCreated";
    }

    // ユーザー情報の更新(PUT)
    @RequestMapping(value = "/user", method = RequestMethod.PUT)
    public String updateUser(User user) {
        return "userUpdated";
    }

    // ユーザー情報の削除(DELETE)
    @RequestMapping(value = "/user", method = RequestMethod.DELETE)
    public String deleteUser() {
        return "userDeleted";
    }
}

上記のように、@RequestMappingmethod属性を使って、目的別にHTTPメソッドを明示することで、RESTfulな設計に近づけることができます。
SpringコントローラでHTTPメソッドを明示的に指定することは、処理の意図を明確に伝えるためにとても重要です。

また、同じ/userというURLに対して、処理の内容が異なることで、URL設計がシンプルになり、保守性も向上します。

5. 実践:@RequestMappingを使った簡単なハンドラメソッドの例

5. 実践:@RequestMappingを使った簡単なハンドラメソッドの例
5. 実践:@RequestMappingを使った簡単なハンドラメソッドの例

ここでは、実際に@RequestMappingを使って、簡単な登録処理と確認処理を行うハンドラメソッドを紹介します。
フォームから送られた名前を受け取り、別の画面に表示する流れを想定しています。


@Controller
public class GreetingController {

    // 入力フォームの表示(GET)
    @RequestMapping(value = "/greet", method = RequestMethod.GET)
    public String showForm() {
        return "greetForm";
    }

    // フォーム送信後の処理(POST)
    @RequestMapping(value = "/greet", method = RequestMethod.POST)
    public String submitForm(@RequestParam("name") String name, Model model) {
        model.addAttribute("userName", name);
        return "greetResult";
    }
}

上記の例では、まず/greetにGETアクセスするとフォームが表示されます。
ユーザーが名前を入力してPOSTリクエストを送ると、入力されたnameがコントローラで受け取られ、モデルに追加されます。

実行結果として、名前が画面に表示されるビューが表示されるという簡単な処理ですが、@RequestMappingmethod属性の使い分けが理解できる良い練習になります。

Springではこのように、ひとつのURLに対してHTTPメソッドごとに処理を分けることが基本です。
また、GETとPOSTを正しく使い分けることで、予期せぬデータ更新や表示ミスを防ぐことができます。

6. @RequestMapping以外のHTTPメソッド専用アノテーション(@GetMappingなど)との違い

6. @RequestMapping以外のHTTPメソッド専用アノテーション(@GetMappingなど)との違い
6. @RequestMapping以外のHTTPメソッド専用アノテーション(@GetMappingなど)との違い

Springでは、@RequestMappingの他にも、HTTPメソッド専用のアノテーションとして@GetMapping@PostMapping@PutMapping@DeleteMappingなどが用意されています。
これらは内部的には@RequestMappingと同じ仕組みを使っていますが、より簡潔に記述できる点が特徴です。

たとえば、次の2つのコードは同じ意味を持ちます。


@Controller
public class SampleController {

    @RequestMapping(value = "/sample", method = RequestMethod.GET)
    public String getSample() {
        return "sampleView";
    }
}

@Controller
public class SampleController {

    @GetMapping("/sample")
    public String getSample() {
        return "sampleView";
    }
}

上記のように、@GetMappingを使うと、valuemethodを省略して記述できるため、コードがすっきりと読みやすくなります。
ただし、@RequestMappingは柔軟性が高く、複数のメソッドを同時に指定したり、細かい条件で分岐させたりする場合に便利です。

初心者のうちは@RequestMappingの基本を理解しておくことが大切ですが、慣れてきたら@GetMappingなどの専用アノテーションも積極的に使うと良いでしょう。

7. HTTPメソッドの選び方の実践ポイント(GETとPOSTの使い分けなど)

7. HTTPメソッドの選び方の実践ポイント(GETとPOSTの使い分けなど)
7. HTTPメソッドの選び方の実践ポイント(GETとPOSTの使い分けなど)

Springでアプリケーションを開発するときには、HTTPメソッドを正しく使い分けることが重要です。
特にGETPOSTの使い分けは初心者が最初に学ぶべきポイントです。

  • GET: サーバーから情報を取得する場合に使います。検索フォームやページの閲覧など。
  • POST: サーバーにデータを送信する場合に使います。フォーム送信や新規データの登録など。

例えば、検索画面で条件を入力して結果を表示するだけならGET、会員登録などでデータを送信して保存するならPOSTを使います。
これはHTTPの基本的なルールでもあり、Web全体で共通の考え方です。

なお、PUTDELETEはフォームから直接使うことはできませんが、JavaScriptやAjaxと組み合わせることで利用することができます。
初心者のうちはまずGETPOSTの正しい使い分けからマスターしていくのが良いでしょう。

適切なHTTPメソッドを使い分けることで、セキュリティや可読性、メンテナンス性の向上につながります。
Springコントローラでも、どのリクエストに対してどの処理を行うかを明確に定義することで、バグを防ぐことができます。

8. よくある間違いとその対策(method属性の指定忘れなど)

8. よくある間違いとその対策(method属性の指定忘れなど)
8. よくある間違いとその対策(method属性の指定忘れなど)

@RequestMappingを使う際に、初心者がよく陥るミスのひとつがmethod属性の指定忘れです。
method属性を省略した場合、すべてのHTTPメソッド(GET・POST・PUT・DELETEなど)に対して、そのメソッドが呼び出されてしまいます。

これは意図しない挙動につながることがあり、セキュリティの問題やバグの原因になることがあります。
そのため、method属性はできる限り明示的に記述するようにしましょう。

以下に、method属性を省略したことで起こりうる問題の例を示します。


@Controller
public class WarningController {

    @RequestMapping("/danger")
    public String doSomething() {
        // すべてのHTTPメソッドで呼ばれてしまう
        return "danger";
    }
}

上記のように、method属性がない場合はGETでもPOSTでもDELETEでも呼び出されてしまうため、意図しない挙動になります。

正しくは、次のようにmethod属性を明示しましょう。


@Controller
public class WarningController {

    @RequestMapping(value = "/danger", method = RequestMethod.POST)
    public String doSomething() {
        return "danger";
    }
}

このように記述することで、POSTメソッド以外ではこの処理が呼び出されなくなります。
Springでは明示的にHTTPメソッドを指定することで、セキュリティと可読性の高いコントローラ設計が可能になります。

もうひとつのよくある間違いとして、複数のHTTPメソッドに対応したいときにmethod属性を使わず、同じURLに対してメソッドを重複して書いてしまうケースがあります。


// 間違った例(同じURLで複数定義すると競合する)
@Controller
public class SampleController {

    @RequestMapping("/sample")
    public String handleGet() {
        return "getView";
    }

    @RequestMapping("/sample")
    public String handlePost() {
        return "postView";
    }
}

このような場合は、同じvalue属性に対してmethod属性を使って正しく分岐させる必要があります。


// 正しい例
@Controller
public class SampleController {

    @RequestMapping(value = "/sample", method = RequestMethod.GET)
    public String handleGet() {
        return "getView";
    }

    @RequestMapping(value = "/sample", method = RequestMethod.POST)
    public String handlePost() {
        return "postView";
    }
}

Springで@RequestMappingを使用する際は、HTTPメソッドの指定を怠らず、正確に制御することが安定したアプリケーション開発に繋がります。
また、@GetMapping@PostMappingなどの専用アノテーションも理解し、場面に応じて使い分けることが重要です。

まとめ

まとめ
まとめ

この記事で理解しておきたいポイント

ここまで、Spring MVCにおける@RequestMappingとHTTPメソッドの使い分けについて、基礎から実践まで丁寧に確認してきました。 Springコントローラの役割は、ユーザーから送られてくるリクエストを正しく受け取り、適切な処理へとつなぐことです。 その中心となるのが@RequestMappingであり、URLと処理を結びつける重要なアノテーションです。

特に重要なのは、同じURLであってもHTTPメソッドによって処理の意味がまったく異なるという点です。 GETは情報の取得、POSTはデータの送信や登録といったように、HTTPメソッドには明確な役割があります。 Springでは@RequestMappingのmethod属性を使うことで、このHTTPメソッドの違いをコード上で正確に表現できます。

method属性を指定せずに@RequestMappingを使ってしまうと、GETやPOST、場合によってはPUTやDELETEでも同じ処理が呼ばれてしまいます。 これは意図しない動作やセキュリティ上の問題につながる可能性があるため、初心者のうちから明示的にHTTPメソッドを指定する癖をつけることが大切です。 Springコントローラ設計において、この意識を持つかどうかでコードの品質は大きく変わってきます。

@RequestMappingとHTTPメソッド設計の実践的な考え方

Webアプリケーションでは、画面表示とデータ処理を明確に分ける設計が求められます。 たとえば、入力フォームを表示する処理はGET、フォーム送信後の登録処理はPOSTというように役割を分離することで、 処理の流れが分かりやすくなり、後からコードを読み返したときにも理解しやすくなります。

Spring MVCでは、同じURLに対してHTTPメソッドごとに処理を分けられる点が大きな特徴です。 これによりURL設計がシンプルになり、RESTfulな考え方にも自然と近づきます。 初心者のうちは難しく感じるかもしれませんが、GETとPOSTの使い分けを意識するだけでも、設計の質は大きく向上します。

サンプルプログラムで振り返る@RequestMapping

ここで、これまで学んだ内容を整理するために、シンプルな@RequestMappingのサンプルをもう一度確認してみましょう。 画面表示と登録処理をHTTPメソッドで分ける基本的な構成です。


@Controller
public class ReviewController {

    // 画面表示(GET)
    @RequestMapping(value = "/review", method = RequestMethod.GET)
    public String showPage() {
        return "reviewPage";
    }

    // データ送信(POST)
    @RequestMapping(value = "/review", method = RequestMethod.POST)
    public String submitData() {
        return "reviewResult";
    }
}

このように、URLは同じでもHTTPメソッドによって処理を分けることで、 「何のためのリクエストなのか」がコードから一目で分かるようになります。 Springコントローラを書くときは、常にHTTPメソッドの意味を意識しながら設計することが重要です。

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

生徒:「@RequestMappingって、ただURLを指定するだけだと思っていましたが、HTTPメソッドまで含めて考えるのが大事なんですね。」

先生:「その通りです。URLだけを見るのではなく、GETなのかPOSTなのかを意識することで、処理の意味がはっきりします。」

生徒:「同じURLでも、画面表示と登録処理を分けられるのは便利ですね。」

先生:「Spring MVCの大きな強みですね。設計が整理されて、保守もしやすくなります。」

生徒:「method属性を指定しないと全部のHTTPメソッドで呼ばれるのは、ちょっと怖いなと思いました。」

先生:「良い気づきです。初心者のうちから明示的にHTTPメソッドを指定する習慣をつけると、安全で読みやすいコードが書けるようになりますよ。」

生徒:「まずはGETとPOSTを正しく使い分けられるように練習してみます!」

先生:「それが一番の近道です。基礎をしっかり押さえれば、Springの理解は自然と深まっていきます。」

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

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

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

Spring Bootのプログラミングでよく見かける「アノテーション」とは何ですか?また、今回の記事のテーマである「@RequestMapping」にはどのような役割があるのでしょうか?

アノテーションとは、Javaのプログラムコードに対して、コンパイラやフレームワークへ特定の意味を伝えるための注釈(メタデータ)のようなものです。Spring MVCフレームワークにおいて「@RequestMapping」というアノテーションは、Webアプリケーションに届いたリクエストのURLパスやHTTPメソッドの内容に応じて、実行すべきコントローラ内のメソッド(処理)を適切に振り分ける「ルーティング」という非常に重要な役割を担っています。これにより、ユーザーがブラウザで特定のURLにアクセスした際に、それに対応したJavaのプログラムが自動的に呼び出される仕組みを作ることができます。
コメント
コメント投稿は、ログインしてください

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

カテゴリの一覧へ
新着記事
New1
Springの基本
Spring Initializr入門!初心者でも簡単にJavaプロジェクトを作る方法
New2
Thymeleaf
Thymeleafのメリット・デメリットまとめ
New3
Spring認証(Spring Security)
フォーム認証とは?基本概念を完全ガイド!初心者でもわかる仕組み解説
New4
SpringのDB操作
JPQLのHAVING句(GROUP BY)の使い方や活用方法を初心者向けに解説!
人気記事
No.1
Java&Spring記事人気No1
Springの基本
Spring Bootとは?初心者向けに役割とできることを徹底解説
No.2
Java&Spring記事人気No2
SpringのAPI開発(REST & GraphQL)
REST APIの主要なHTTPメソッド(GET, POST, PUT, DELETE)を初心者向けにわかりやすく解説!
No.3
Java&Spring記事人気No3
Springの基本
Spring Bootの依存関係管理を徹底解説!Maven・Gradleとスターターの仕組み
No.4
Java&Spring記事人気No4
SpringのDB操作
Spring Data JPAメソッド名クエリ完全ガイド!SQL不要のデータ操作
No.5
Java&Spring記事人気No5
Thymeleaf
Thymeleaf とは?初心者向けにThymeleafの基本を徹底解説
No.6
Java&Spring記事人気No6
Springの基本
Spring Boot入門!初心者でもわかるロギング設定とSLF4J・Logbackの使い方
No.7
Java&Spring記事人気No7
Spring認証(Spring Security)
セッション管理の基本(@SessionAttributes)を完全解説!初心者でもわかるセッションの仕組み
No.8
Java&Spring記事人気No8
Springの基本
Spring Bootの初期化処理を完全解説!ApplicationRunnerとCommandLineRunnerの使い方を初心者向けに解説