カテゴリ: Spring 更新日: 2026/05/09

Springの@ModelAttributeアノテーションの使い方を完全解説!初心者向けにフォーム連携をやさしく理解

Springの@ModelAttributeアノテーション
Springの@ModelAttributeアノテーション

先生と生徒の会話形式で理解しよう

生徒

「Spring Bootでフォームの入力値をJavaのクラスに受け取る方法がよく分かりません。」

先生

「Springでは、@ModelAttributeアノテーションを使うことで、フォームの値をJavaオブジェクトへ自動で格納できます。」

生徒

「自動で格納できるんですか?難しそうです。」

先生

「実はとても便利で、Spring MVCやSpring BootのWeb開発では頻繁に使われています。会員登録フォームやログイン画面でもよく利用されます。」

生徒

「どんな場面で使うのか、基本から知りたいです。」

先生

「それでは、Springの@ModelAttributeアノテーションについて、初心者向けに丁寧に学んでいきましょう。」

1. @ModelAttributeアノテーションとは?

「1. @ModelAttributeアノテーションとは?」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

1. @ModelAttributeアノテーションとは?
1. @ModelAttributeアノテーションとは?

Spring Frameworkの@ModelAttributeアノテーションは、 HTMLフォームから送信されたデータをJavaクラスへ自動的に格納するために使用されます。 Spring MVCやSpring BootのWebアプリケーション開発では非常によく使われる重要な機能です。

例えば、ユーザー登録画面で「名前」「メールアドレス」「年齢」などを入力した場合、 その値をJavaオブジェクトへ自動でセットできます。

通常であれば、フォームの値を一つずつ取得する必要がありますが、 @ModelAttributeを使うことでコード量を大幅に減らせます。 そのため、Spring Boot初心者が最初に覚えるべき便利なアノテーションの一つです。

ポイント
Spring Bootのフォーム処理では、@ModelAttributeを使うことで、 フォーム入力値とJavaクラスを簡単に連携できます。

2. 基本的な使い方

2. 基本的な使い方
2. 基本的な使い方

まずは、@ModelAttributeの基本的な使い方を見てみましょう。 フォームの入力値を受け取るために、Javaのクラスを作成します。


public class UserForm {

    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;
    }
}

次に、Controllerクラスで@ModelAttributeを使用します。


@Controller
public class UserController {

    @PostMapping("/register")
    public String register(
            @ModelAttribute UserForm userForm) {

        System.out.println(userForm.getName());
        System.out.println(userForm.getEmail());

        return "result";
    }
}

このように書くことで、フォームから送信された値が UserFormオブジェクトへ自動で格納されます。

Spring Bootでは、フォームのname属性とJavaクラスのフィールド名が一致していると、 自動的に値がセットされます。

3. HTMLフォームとの連携方法

3. HTMLフォームとの連携方法
3. HTMLフォームとの連携方法

次は、実際にHTMLフォームと連携してみましょう。 Spring Bootのフォーム処理では、name属性が非常に重要です。


<form action="/register" method="post">

    名前:
    <input type="text" name="name">

    メールアドレス:
    <input type="text" name="email">

    <button type="submit">
        登録
    </button>

</form>

上記のHTMLフォームで入力された値は、 ControllerのUserFormへ自動で格納されます。

例えば、「山田太郎」と入力した場合、 setName()メソッドが内部で自動的に呼ばれます。

Spring MVCでは、このデータの自動変換機能をデータバインドと呼びます。 この仕組みにより、Java Web開発の効率が大きく向上します。

4. @RequestParamとの違い

「4. @RequestParamとの違い」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

4. @RequestParamとの違い
4. @RequestParamとの違い

Spring Boot初心者がよく迷うのが、 @RequestParam@ModelAttributeの違いです。

@RequestParamは、単一の値を取得するときに使います。 一方で、@ModelAttributeは複数の入力値をまとめて受け取る場合に便利です。


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

    System.out.println(name);
    System.out.println(email);

    return "result";
}

上記のように書くこともできますが、 項目数が増えるとコードが長くなります。

そのため、実際のSpring Boot開発では、 フォーム入力が多い場合に@ModelAttributeを利用するケースが非常に多いです。

機能 特徴
@RequestParam 単一パラメータ向け
@ModelAttribute フォーム全体をオブジェクト化できる

5. GETリクエストでも使える

5. GETリクエストでも使える
5. GETリクエストでも使える

@ModelAttributeはPOST送信だけではなく、 GETリクエストでも利用できます。

例えば、検索フォームなどで便利です。


@Controller
public class SearchController {

    @GetMapping("/search")
    public String search(
            @ModelAttribute SearchForm form) {

        System.out.println(form.getKeyword());

        return "search";
    }
}

URLが次のようになっていた場合、 keywordの値が自動的に格納されます。


/search?keyword=Spring

このように、Spring BootではURLパラメータも簡単にJavaオブジェクトへ変換できます。

6. 初心者がハマりやすい注意点

6. 初心者がハマりやすい注意点
6. 初心者がハマりやすい注意点

Spring Boot初心者が@ModelAttributeで失敗しやすいポイントもあります。

  • フォームのname属性とJavaフィールド名が一致していない
  • getterとsetterが存在しない
  • フィールド名のスペルミス
  • privateフィールドだけでsetterを書いていない

特にgetterとsetterを忘れるケースは非常に多いです。 Spring Frameworkはsetterメソッドを利用して値をセットするため、 setterが無いと値を格納できません。

また、HTML側のname属性が異なっている場合もデータバインドされません。


<input type="text" name="userName">

上記の場合、Java側がnameフィールドだと値が入りません。 フィールド名を統一することが重要です。

7. バリデーションと組み合わせる方法

「7. バリデーションと組み合わせる方法」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

7. バリデーションと組み合わせる方法
7. バリデーションと組み合わせる方法

Spring Bootでは、 @ModelAttributeとバリデーション機能を組み合わせることもできます。

入力チェックを行うことで、安全なWebアプリケーションを作成できます。


public class UserForm {

    @NotBlank
    private String name;

    @Email
    private String email;

    public String getName() {
        return name;
    }

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

Controller側では、@Validを追加します。


@PostMapping("/register")
public String register(
        @Valid @ModelAttribute UserForm form,
        BindingResult result) {

    if (result.hasErrors()) {
        return "form";
    }

    return "result";
}

このように書くことで、 未入力チェックやメール形式チェックなどを簡単に実装できます。

Spring Bootの実務開発では、 バリデーションと@ModelAttributeはセットで利用されることが非常に多いです。

8. 実務でよく使う活用例

8. 実務でよく使う活用例
8. 実務でよく使う活用例

Spring Bootの実務開発では、 @ModelAttributeはさまざまな画面で使われています。

会員登録フォーム

名前、住所、電話番号、メールアドレスなどをまとめて受け取る場面で利用されます。

ログイン画面

ユーザーIDやパスワードをJavaオブジェクトへ格納できます。

検索フォーム

商品検索や記事検索などの条件入力でよく利用されます。

お問い合わせ画面

入力内容をまとめて管理できるため、コードが整理しやすくなります。

このように、Spring MVCやSpring Bootでは、 フォーム処理の中心的な機能として@ModelAttributeが活躍しています。

Spring Boot初心者は、 まず「フォームの値をJavaオブジェクトへ自動で格納する仕組み」と覚えると理解しやすいです。

実際にコードを書きながら試していくことで、 Spring Frameworkのデータバインド機能への理解も深まります。

まとめ

まとめ
まとめ

今回は、Spring BootやSpring MVCで非常によく利用される @ModelAttributeアノテーションについて詳しく学びました。 JavaのWebアプリケーション開発では、 フォーム入力値をどのようにJavaオブジェクトへ格納するかが重要になります。 その中でも、Spring Frameworkの@ModelAttributeは、 初心者から実務開発まで幅広く利用される重要な機能です。

特にSpring Bootのフォーム処理では、 ユーザー登録画面、ログイン画面、検索フォーム、お問い合わせフォームなど、 さまざまな場面で利用されています。 フォームから送信された値を自動的にJavaクラスへセットできるため、 コードをシンプルに管理できます。

Spring Boot初心者の場合、 最初は「フォームの値がどのようにJavaへ渡されるのか」が分かりにくいことがあります。 しかし、@ModelAttributeを理解すると、 Spring MVCのデータバインドの仕組みも自然と理解できるようになります。

重要なポイント
Spring Bootの@ModelAttributeは、 HTMLフォームとJavaクラスを簡単に連携できる便利な機能です。

フォーム連携を理解することが大切

Spring BootのWeb開発では、 HTMLフォームとの連携が非常に重要です。 フォーム入力値を一つずつ取得する方法もありますが、 実際の開発では入力項目が多くなるケースがほとんどです。

例えば、会員登録画面では、 名前、住所、電話番号、生年月日、メールアドレス、パスワードなど、 多くの入力項目があります。 そのような場合、 @ModelAttributeを利用することで、 入力値を一つのJavaクラスとして管理できます。


public class MemberForm {

    private String userName;

    private String password;

    private String address;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

このようにフォーム用クラスを作成しておくことで、 Spring BootのController側で簡単にフォームデータを扱えるようになります。

Controllerでの基本的な使い方を復習

Spring MVCでは、 Controllerクラスで@ModelAttributeを指定することで、 自動的にフォーム値を受け取れます。


@Controller
public class MemberController {

    @PostMapping("/member/save")
    public String save(
            @ModelAttribute MemberForm form) {

        System.out.println(form.getUserName());

        return "complete";
    }
}

このコードでは、 HTMLフォームから送信された値が MemberFormオブジェクトへ自動的に格納されます。

Spring Bootでは、 フォームのname属性とJavaクラスのフィールド名が一致していることが重要です。 このルールを理解しておくことで、 Spring Frameworkのフォーム連携がスムーズになります。

HTMLフォームとの対応関係を確認

HTMLフォームでは、 inputタグのname属性が非常に重要です。 Java側のフィールド名と一致していない場合、 データが格納されません。


<form action="/member/save" method="post">

    ユーザー名:
    <input type="text" name="userName">

    パスワード:
    <input type="password" name="password">

    <button type="submit">
        保存
    </button>

</form>

Spring Boot初心者は、 name属性とJavaフィールド名の違いでエラーになるケースが非常に多いです。 そのため、まずはフィールド名を統一する意識を持つことが大切です。

getterとsetterも重要

Spring Frameworkでは、 setterメソッドを利用して値をセットしています。 そのため、getterやsetterが存在しない場合、 正しくデータを受け取れません。

最近ではLombokを利用してコードを簡略化するケースも増えていますが、 Spring Boot初心者のうちは、 getterとsetterの仕組みを理解しておくことが非常に大切です。


public class ProductForm {

    private String productName;

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }
}

Spring Bootのデータバインド機能は、 このsetterを内部的に利用しています。

バリデーションとの組み合わせも重要

実務のSpring Boot開発では、 入力チェックと組み合わせるケースが非常に多いです。 例えば、未入力チェックや文字数チェック、 メールアドレス形式チェックなどがあります。


public class ContactForm {

    @NotBlank
    private String name;

    @Size(max = 100)
    private String message;

    public String getName() {
        return name;
    }

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

Spring Bootでは、 @Validと組み合わせることで、 入力チェック機能を簡単に実装できます。

Webアプリケーション開発では、 セキュリティや入力ミス対策も重要です。 そのため、バリデーション機能を組み合わせることは実務でも非常によくあります。

Spring Boot初心者が覚えるべきポイント

  • フォームのname属性とJavaフィールド名を一致させる
  • getterとsetterを必ず用意する
  • フォーム入力値をオブジェクトで管理する
  • 複数項目の入力時は@ModelAttributeを利用する
  • 実務ではバリデーションと組み合わせることが多い

Spring Bootの@ModelAttributeを理解すると、 Spring MVCのフォーム処理全体の理解も深まります。 また、Controller設計やフォーム設計も整理しやすくなります。

Java初心者の場合、 最初は難しく感じるかもしれませんが、 実際にサンプルコードを書きながら動かしていくことで理解しやすくなります。

特にSpring Bootでは、 フォーム処理の実装頻度が非常に高いため、 @ModelAttributeを使いこなせるようになると、 Webアプリケーション開発の効率が大きく向上します。

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

生徒

「Spring Bootの@ModelAttributeって、フォーム入力をまとめて受け取るための機能だったんですね。」

先生

「その通りです。Spring MVCでは非常によく使われる機能で、実務開発でも頻繁に登場します。」

生徒

「フォームのname属性とJavaのフィールド名を合わせることが重要だと分かりました。」

先生

「そこは特に大切なポイントです。名前が一致していないと、Spring Bootが自動で値をセットできません。」

生徒

「getterやsetterも必要なんですね。」

先生

「Spring Frameworkはsetterメソッドを利用してデータを格納しているので、getterとsetterは基本になります。」

生徒

「実務ではバリデーションとも一緒に使うことが多いんですよね。」

先生

「はい。Spring Bootでは入力チェックと組み合わせて、安全なWebアプリケーションを作ることが非常に重要です。」

生徒

「これからSpring MVCのフォーム処理を作るときは、積極的に使ってみます。」

先生

「実際にコードを書いて慣れていくことで、Spring Bootの理解がさらに深まります。まずはシンプルなフォーム画面から試してみましょう。」

カテゴリの一覧へ
新着記事
New1
Java
JavaのNotSerializableExceptionを完全解説!初心者でも理解できるシリアライズと例外処理
新規投稿
New2
Spring
Springの@Repositoryアノテーションの使い方を徹底解説!初心者でもわかるSpringフレームワークのデータアクセス
更新記事
New3
Spring
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
更新記事
New4
Java
Javaのjava.mathとBigIntegerのintValueメソッドを完全解説!初心者でもわかる数値変換の基本
更新記事
人気記事
No.1
Java&Spring記事人気No1
Servlet
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.2
Java&Spring記事人気No2
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.3
Java&Spring記事人気No3
JSP
JSPでフォームを表示して入力を受け取る基本手順をやさしく解説!初心者向けフォーム処理の入門ガイド
No.4
Java&Spring記事人気No4
Spring
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.5
Java&Spring記事人気No5
JSP
JSPでCSSやJSを読み込む基本!外部ファイルのパス指定に注意しよう
No.6
Java&Spring記事人気No6
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.7
Java&Spring記事人気No7
Spring
Spring Data JPA入門!findAll()やfindBy**()の使い方などデータベース操作の基礎を学ぶ
No.8
Java&Spring記事人気No8
JSP
JSPでif文・for文を使う方法!初心者でもわかるJavaとの違いと使い方