カテゴリ: Spring 更新日: 2025/07/12

@PostMappingを使ってフォームを受け取る流れを初心者向けに解説!

@PostMappingを使ってフォームを受け取る流れ
@PostMappingを使ってフォームを受け取る流れ

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

新人

「Spring Bootで画面に入力フォームを作って、そこに入力されたデータをサーバーで受け取りたいんですが、どうすればいいですか?」

先輩

「その場合は、@PostMappingというアノテーションを使うのが基本です。フォームに入力された値を、Springのコントローラーで受け取れるようになりますよ。」

新人

「@PostMappingって、どんなことができるんですか?Javaのメソッドに付けるだけで良いんですか?」

先輩

「そうですね、実際に使い方を見ながら、フォームの送信と連携する仕組みを丁寧に解説していきます!」

1. @PostMappingとは?

1. @PostMappingとは?
1. @PostMappingとは?

Spring Bootにおける@PostMappingは、HTMLフォームなどから送信されるデータをPOSTリクエストとして受け取るためのアノテーションです。Javaのクラスの中で、特定のメソッドに対して@PostMappingを付けることで、フォームから送られたデータを受け取る機能を実装できます。

Spring Frameworkでは、Web画面とサーバー側の連携をシンプルに行うために、こういったアノテーション(特別な命令)を使います。特にフォームとの連携では、@PostMappingがとても重要な役割を果たします。

2. @PostMappingを使うと何ができるのか

2. @PostMappingを使うと何ができるのか
2. @PostMappingを使うと何ができるのか

@PostMappingを使うことで、次のようなフォーム処理が可能になります。

  • 入力フォームに書かれたデータをJavaのクラスに取り込む
  • ユーザーが送信した内容を確認したり、データベースに保存したりできる
  • 他の画面に結果を表示するなどのレスポンス処理が可能になる

たとえば、以下のようにコントローラクラスに@PostMappingを使ったメソッドを書くことで、HTMLのフォームと接続できます。


@Controller
public class ContactController {

    @PostMapping("/submit")
    public String submitForm(String name, String email) {
        System.out.println("名前:" + name);
        System.out.println("メール:" + email);
        return "result";
    }
}

このように、@PostMappingはフォームデータを受け取る「入り口」として働きます。

3. フォームから値を送る仕組み

3. フォームから値を送る仕組み
3. フォームから値を送る仕組み

フォームを使ってユーザーからの入力を受け取るには、HTMLフォームを使ってデータをサーバーに送信する必要があります。フォームは「どこに送るか」「どの方法で送るか」を指定できます。

たとえば、以下のようにHTMLファイル内で<form>タグを使って記述します。


<form action="/submit" method="post">
    <label>名前:</label>
    <input type="text" name="name"><br>
    <label>メール:</label>
    <input type="email" name="email"><br>
    <button type="submit">送信</button>
</form>

このフォームでは、入力された「名前」と「メール」が、actionで指定されたURL(ここでは/submit)に対してPOSTメソッドで送信されます。

Spring側では、先ほど紹介した@PostMapping("/submit")の部分で、HTMLフォームからのリクエストを受け取ることができます。

このように、HTMLとSpringの連携によって、画面からサーバーへ安全にデータを渡すことができるのです。

4. コントローラクラスの作成と@PostMappingの書き方

4. コントローラクラスの作成と@PostMappingの書き方
4. コントローラクラスの作成と@PostMappingの書き方

Spring BootでHTMLフォームの入力を受け取るには、@Controllerアノテーションを付けたクラスを作成し、そこに@PostMappingを記述したメソッドを用意します。

まず、pleiadesで作成したプロジェクトのsrc/main/javaディレクトリ内に、controllerパッケージを作ってクラスを定義します。


package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class ContactController {

    @PostMapping("/submit")
    public String handleForm(
            @RequestParam("name") String name,
            @RequestParam("email") String email) {

        System.out.println("受け取った名前:" + name);
        System.out.println("受け取ったメール:" + email);
        return "result";
    }
}

@Controllerを付けることで、このクラスがWebリクエストを受け取る役割であるとSpringが認識します。

また、@RequestParamを使うことで、フォームの中のname属性の値をJavaの変数として受け取ることができます。ここでは、「name」と「email」がそれぞれの引数に入ります。

5. HTMLフォームを作って画面に表示する方法(Thymeleaf使用)

5. HTMLフォームを作って画面に表示する方法(Thymeleaf使用)
5. HTMLフォームを作って画面に表示する方法(Thymeleaf使用)

フォーム画面は、src/main/resources/templatesディレクトリにHTMLファイルを作成し、Thymeleafテンプレートエンジンを使って記述します。ファイル名はform.htmlなど分かりやすい名前にします。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>お問い合わせフォーム</title>
</head>
<body>
    <h2>お問い合わせフォーム</h2>
    <form th:action="@{/submit}" method="post">
        <label>名前:</label>
        <input type="text" name="name"><br><br>
        <label>メール:</label>
        <input type="email" name="email"><br><br>
        <button type="submit">送信</button>
    </form>
</body>
</html>

ここでは、th:action="@{/submit}"とすることで、Spring側の@PostMapping("/submit")と正しく接続されます。

このHTMLを表示するためには、@GetMappingで対応する画面表示の処理も必要になります。コントローラクラスに以下を追加しましょう。


@GetMapping("/form")
public String showForm() {
    return "form";
}

これで、/formにアクセスするとform.htmlが表示され、入力フォームからPOSTリクエストが送れるようになります。

6. HTMLフォームからPOSTでデータを送信する流れ

6. HTMLフォームからPOSTでデータを送信する流れ
6. HTMLフォームからPOSTでデータを送信する流れ

ここまでで、HTML画面を表示して、そこから@PostMappingにPOSTリクエストを送る基本の流れができました。全体の流れを整理すると、以下のようになります。

  1. ユーザーがブラウザで/formにアクセス
  2. Springがform.htmlを表示
  3. フォームに名前とメールを入力し、「送信」ボタンを押す
  4. フォームの内容が/submitにPOST送信される
  5. @PostMapping("/submit")がそのデータを受け取る
  6. Javaのメソッド内でデータを処理し、画面遷移(または確認画面表示)

このように、Spring Boot フォーム処理では、@GetMapping@PostMappingを組み合わせて、入力画面と送信先の処理をしっかり分けて実装するのが基本です。

今回は@RequestParamで単純なデータを受け取りましたが、次回は@ModelAttributeや専用のFormクラスを使って、より複雑なデータを安全に扱う方法も紹介できます。

また、Spring Bootの開発環境としては、pleiadesでGradleを使って構成するのが一般的です。依存関係はSpring WebThymeleafを含めれば、ここまでのフォーム処理が可能になります。

7. コントローラで受け取ったデータの確認方法(@ModelAttributeとFormオブジェクト)

7. コントローラで受け取ったデータの確認方法(@ModelAttributeとFormオブジェクト)
7. コントローラで受け取ったデータの確認方法(@ModelAttributeとFormオブジェクト)

ここからは、@ModelAttributeを使ってフォームの値を1つのオブジェクトとして受け取る方法を解説します。これにより、複数の入力項目をまとめて扱えるようになります。

まずは、フォームデータを格納するためのJavaクラス(Formオブジェクト)を作成します。例えば、ContactFormという名前のクラスを作成します。


package com.example.demo.form;

public class ContactForm {
    private String name;
    private String email;

    // ゲッターとセッター
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

次に、コントローラでこのFormクラスを使って値を受け取るようにします。ポイントは、@ModelAttributeをメソッド引数に付けることです。


package com.example.demo.controller;

import com.example.demo.form.ContactForm;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class ContactController {

    @PostMapping("/submit")
    public String handleSubmit(@ModelAttribute ContactForm form) {
        System.out.println("名前:" + form.getName());
        System.out.println("メール:" + form.getEmail());
        return "result";
    }
}

このように@ModelAttributeを使えば、複数のフォーム項目を1つのJavaオブジェクトとしてまとめて受け取ることができます。

8. フォームから送信された値の画面表示

8. フォームから送信された値の画面表示
8. フォームから送信された値の画面表示

フォームで送信されたデータを、送信後の画面(確認画面や完了画面など)に表示するには、Thymeleafを使ってテンプレートに値を渡します。

先ほどのhandleSubmitメソッドを、値を画面に表示できるように修正します。


import org.springframework.ui.Model;

@PostMapping("/submit")
public String handleSubmit(@ModelAttribute ContactForm form, Model model) {
    model.addAttribute("name", form.getName());
    model.addAttribute("email", form.getEmail());
    return "result";
}

このコードでは、SpringのModelを使って画面に渡すデータを登録しています。次に、result.htmlを作成して、画面に送信内容を表示しましょう。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>送信結果</title>
</head>
<body>
    <h2>送信ありがとうございました!</h2>
    <p>以下の内容を受け取りました。</p>
    <ul>
        <li>名前:<span th:text="${name}"></span></li>
        <li>メール:<span th:text="${email}"></span></li>
    </ul>
</body>
</html>

このようにすれば、フォームで入力された値を確認画面として表示することができます。

9. よくあるエラーとその対処法

9. よくあるエラーとその対処法
9. よくあるエラーとその対処法

Spring Bootで@PostMappingを使ってフォーム処理をする際、初心者がよくつまずくポイントとその解決方法を紹介します。

① HTTP 405 エラー(Method Not Allowed)

このエラーは、HTMLフォームがPOSTで送信されているのに、Spring側で@PostMappingではなく@GetMappingで受け取ろうとしている場合に発生します。

→ 対処法:フォームのmethod="post"に対して、Springのコントローラでは@PostMappingを使ってください。

② リクエストのURLが一致しない

フォームのaction属性に設定したパスと、コントローラの@PostMappingで指定したパスが一致していないと、リクエストが正しく届きません。

→ 対処法:HTMLではth:action="@{/submit}"、Javaでは@PostMapping("/submit")を揃えましょう。

③ フォームデータが受け取れない

フォームのname属性と、Javaの受け取り変数名が一致していない場合、データが受け取れません。

→ 対処法:@RequestParam@ModelAttributeを使うときは、フォームのnameと一致させてください。

④ result.htmlが表示されない

テンプレート名が間違っているか、templatesフォルダの配置場所が正しくない可能性があります。

→ 対処法:HTMLファイルは必ずsrc/main/resources/templatesに置いて、拡張子は.htmlにしましょう。

これらはSpringフォーム処理でよくあるつまずきです。原因を1つずつ見直せば、必ず解決できます。

コメント
コメント投稿は、ログインしてください

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

カテゴリの一覧へ
新着記事
Java の void メソッドとは?戻り値がない場合の使い方を初心者向けに徹底解説
Javaのメソッドのメリットを完全解説!処理の整理と再利用で初心者でも読みやすいコードに
Javaの戻り値とは?初心者でもわかるメソッドの基本と値を返す仕組み
Javaの引数とは?メソッドに値を渡す方法を初心者向けに徹底解説
人気記事
No.1
Java&Spring記事人気No1
SQLのINSERT文を完全ガイド!初心者でもわかるデータの追加方法
No.2
Java&Spring記事人気No2
Modelとは?メソッド引数のModelの使い方を初心者向けに解説!
No.3
Java&Spring記事人気No3
SQLのサブクエリを完全ガイド!入れ子クエリの使い方を初心者向け解説
No.4
Java&Spring記事人気No4
HTMLのセレクトボックス(プルダウン)の使い方を完全ガイド!selectとoptionの基本を覚えよう