カテゴリ: Spring 更新日: 2026/01/18

SpringのModelクラスとaddAttributeメソッドの使い方を完全ガイド!初心者でも安心

ModelのaddAttributeメソッド
ModelのaddAttributeメソッド

教材紹介 Spring Boot 学習のおすすめ教材

Spring Bootを使ったWebアプリケーション開発を、 環境構築から実践まで一通り学びたい方には、 定評のある入門書が参考になります。

Spring Boot 3 プログラミング入門をAmazonで見る

※ Amazon広告リンク

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

生徒

「Springでビューにデータを渡すにはどうすればいいですか?」

先生

「Springでは、org.springframework.uiパッケージに含まれるModelクラスを使います。addAttributeメソッドを使うと、簡単にデータを渡すことができますよ。」

生徒

「具体的にどのようにデータを追加するんですか?」

先生

「それでは、addAttributeメソッドの使い方を詳しく見ていきましょう!」

1. SpringのModelクラスとは?

1. SpringのModelクラスとは?
1. SpringのModelクラスとは?

SpringのModelクラスは、コントローラーからビュー(HTMLテンプレート)へ値を手渡しするための「入れ物」です。キーと値のペアで情報を管理でき、テンプレート側ではそのキー名で取り出して表示します。画面に見せたい最小限の情報だけをまとめるので、コードがすっきりし、役割分担(表示はビュー、処理はコントローラー)が明確になります。

例えば「ユーザー名」「今日のメッセージ」「商品の件数」といった、小さなテキストや数値から、リストやオブジェクトまで扱えます。ポイントはキー名をわかりやすく統一すること。後でテンプレートから参照するときに迷いません。初心者の方は「画面に持っていきたいデータを、箱(Model)に名札(キー)をつけて入れる」と考えると理解しやすいでしょう。

はじめてのサンプル(イメージ)

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping("/hello")
    public String hello(Model model) {
        // 「name」という名札で「太郎」という値を箱(Model)に入れる
        model.addAttribute("name", "太郎");
        // 表示したいテンプレート(ビュー)の名前を返す
        return "hello";
    }
}

テンプレート側では ${name} のように参照できます。まずは「キー=名札」「値=中身」というイメージをつかみ、画面に必要な分だけ入れるのがコツです(Spring Model 使い方 / ビューにデータを渡す / addAttribute 基本)。

2. addAttributeメソッドとは?

2. addAttributeメソッドとは?
2. addAttributeメソッドとは?

addAttributeメソッドは、Modelクラスにデータを追加するためのメソッドです。このメソッドを使うと、キーと値の形式でデータをModelに格納できます。

主に以下のような場面で使用されます:

  • ユーザー情報を渡す
  • 商品リストを表示する
  • フォームの入力結果をビューに反映させる

データを追加する際は、キー名を一貫性のある名前にすることが重要です。これにより、後からビューでデータを扱いやすくなります。

3. 基本的な使い方

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

以下は、addAttributeメソッドを使ってデータを追加し、それをビューに渡す例です。


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class AddAttributeExampleController {

    @GetMapping("/add-attribute")
    public String addAttributeExample(Model model) {
        model.addAttribute("title", "SpringのaddAttributeメソッド");
        model.addAttribute("message", "このデータはaddAttributeを使って渡されました。");
        return "exampleView";
    }
}

この例では、addAttributeメソッドを使って2つのデータ(titleとmessage)をModelに追加しています。このデータはビューで使用できます。

Spring FrameworkやThymeleafを使った Webアプリ開発の全体像をやさしく理解したい人には、 この入門書が定番です。

Spring Framework超入門をAmazonで見る

※ Amazon広告リンク

4. ビューでのデータ表示方法

4. ビューでのデータ表示方法
4. ビューでのデータ表示方法

上記のコードで追加したデータは、Thymeleafなどのテンプレートエンジンを使ってビューで表示できます。以下はその例です:


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title th:text="${title}"></title>
</head>
<body>
    <h1 th:text="${title}"></h1>
    <p th:text="${message}"></p>
</body>
</html>

これにより、コントローラーで設定したデータがブラウザに表示されます。

5. 動的なデータの追加

5. 動的なデータの追加
5. 動的なデータの追加

addAttributeメソッドを使えば、条件によってデータを動的に追加することも可能です。以下はその例です:


@GetMapping("/dynamic-add")
public String dynamicAddExample(Model model, boolean isAdmin) {
    if (isAdmin) {
        model.addAttribute("userRole", "管理者");
    } else {
        model.addAttribute("userRole", "一般ユーザー");
    }
    return "dynamicView";
}

この例では、管理者と一般ユーザーで異なるデータをModelに追加しています。

6. よくある疑問を解決

6. よくある疑問を解決
6. よくある疑問を解決

Q: addAttributeメソッドで追加したデータが表示されないのはなぜですか?

A: キー名のミスや、ビューでの変数参照方法が間違っている可能性があります。キー名が一致しているか確認してください。

Q: Modelに追加するデータに制限はありますか?

A: 制限はありません。文字列、リスト、オブジェクトなど、さまざまなデータ型を追加できます。

Q: 動的にデータを追加する場合、何に注意すべきですか?

A: 条件分岐によってデータが期待通りに追加されるよう、ロジックを明確に記述することが重要です。

7. Model・ModelMap・ModelAndViewの違いと選び方

7. Model・ModelMap・ModelAndViewの違いと選び方
7. Model・ModelMap・ModelAndViewの違いと選び方

同じ「ビューに値を渡す」でも、Model(インターフェース)、ModelMap(Mapベースの実装)、ModelAndView(ビュー名とモデルを一緒に持つ)で使い分けができます。コントローラーメソッドの引数に渡すなら基本はModel、Map操作に慣れている場合はModelMap、処理の途中でビューを切り替えたいときはModelAndViewがわかりやすいです。


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class ModelKindsController {

    @GetMapping("/with-model")
    public String withModel(Model model) {
        model.addAttribute("msg", "Modelで値を追加");
        return "sampleView";
    }

    @GetMapping("/with-modelmap")
    public String withModelMap(ModelMap modelMap) {
        modelMap.addAttribute("msg", "ModelMapで値を追加");
        modelMap.put("count", 3);
        return "sampleView";
    }

    @GetMapping("/with-mav")
    public ModelAndView withModelAndView() {
        ModelAndView mav = new ModelAndView("sampleView");
        mav.addObject("msg", "ModelAndViewで値とビューを同時に設定");
        return mav;
    }
}
  • 迷ったらModel:最も一般的で、テスト・保守もしやすい
  • Map操作重視ならModelMap:putなどMap APIが使える
  • ビュー名を明示したいならModelAndView:転送先をコードで切り替えたいケースに便利

8. @ModelAttributeとフォーム入力の受け渡し(BindingResultと一緒に)

8. @ModelAttributeとフォーム入力の受け渡し(BindingResultと一緒に)
8. @ModelAttributeとフォーム入力の受け渡し(BindingResultと一緒に)

フォームの値をビュー⇄コントローラーで安全にやり取りするなら、コマンドオブジェクトと@ModelAttributeが便利です。検証結果はBindingResultで受け取り、エラー時は同じビューに戻してメッセージを表示します。必要に応じてaddAttributeで補助情報(セレクトボックス用のリスト等)も渡します。


import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.BindingResult;

@Controller
@RequestMapping("/users")
public class UserFormController {

    public static class UserForm {
        @NotBlank(message = "ユーザー名は必須です")
        private String username;
        // getter / setter 省略
        public String getUsername(){ return username; }
        public void setUsername(String username){ this.username = username; }
    }

    @GetMapping("/new")
    public String showForm(@ModelAttribute("userForm") UserForm form, Model model) {
        model.addAttribute("title", "ユーザー登録フォーム");
        return "user/form";
    }

    @PostMapping
    public String submit(@Valid @ModelAttribute("userForm") UserForm form,
                         BindingResult binding, Model model) {
        if (binding.hasErrors()) {
            model.addAttribute("title", "入力エラーがあります");
            return "user/form";
        }
        model.addAttribute("message", "登録が完了しました");
        return "user/complete";
    }
}
  • @ModelAttribute("userForm"):ビュー側では${userForm.*}で参照
  • BindingResult:直前の引数の検証結果を受け取り、エラー表示に活用
  • addAttribute:タイトルや選択肢など補助データを一緒に渡す

9. リダイレクト時のデータ受け渡し(RedirectAttributesとFlash属性)

9. リダイレクト時のデータ受け渡し(RedirectAttributesとFlash属性)
9. リダイレクト時のデータ受け渡し(RedirectAttributesとFlash属性)

POST後にredirect:/...する場合、通常のaddAttributeはクエリパラメータ化されます。一時的な通知メッセージなどは、セッションをまたいで1回だけ有効な「フラッシュ属性」を使うと安全です。


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
public class RedirectController {

    @PostMapping("/save")
    public String saveSomething(RedirectAttributes ra) {
        // URLに出してよい値は addAttribute(= クエリ文字列になる)
        ra.addAttribute("result", "ok");

        // 一度だけ表示したい通知は addFlashAttribute(= セッション一時領域)
        ra.addFlashAttribute("flashMessage", "保存に成功しました");

        return "redirect:/list";
    }
}
  • addAttribute:URLに露出して良い値(ページング条件など)
  • addFlashAttribute:成功・失敗メッセージなど一時的な通知に最適
  • ビュー側:${flashMessage}で1回だけ表示される

まとめ

まとめ
まとめ

SpringのModelクラスとaddAttributeメソッドは、コントローラーからビューにデータを渡すための基本的なツールです。addAttributeメソッドを活用することで、データの管理が簡単になり、ビューでの表示がスムーズに行えるようになります。

特に、動的にデータを追加する方法や、条件によってデータを変更する実装は、Webアプリケーション開発において非常に重要です。また、キー名を一貫して使用することで、保守性やデバッグのしやすさも向上します。

例えば、以下のように追加データをカスタマイズすることで、柔軟なビューの表示が可能です。


@GetMapping("/summary-example")
public String summaryExample(Model model) {
    model.addAttribute("pageTitle", "Springまとめ");
    model.addAttribute("description", "SpringのModelクラスとaddAttributeメソッドの活用方法を学びましょう。");
    model.addAttribute("nextSteps", "次は、SpringのModelMapクラスを理解してみてください!");
    return "summaryView";
}

このように、addAttributeメソッドを使えば、動的なデータ追加が簡単に行えます。次に学ぶべきステップとして、ModelMapやModelAndViewの使い方を習得することで、Springのデータ管理スキルをさらに向上させることができます。

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

生徒

「今日はSpringのaddAttributeメソッドについてたくさん学びました!」

先生

「そうですね。このメソッドは、データをビューに渡す基本的な方法として非常に役立ちます。」

生徒

「動的なデータ追加もできるので、いろいろな場面で使えそうです!」

先生

「その通りです。条件分岐によるデータ管理やビューでの表示方法を工夫することで、ユーザー体験を向上させられますよ。」

生徒

「次は、ModelMapについて学んでみたいです!」

先生

「いいですね。ModelMapは、さらに柔軟なデータ管理が可能になるクラスです。次回も一緒に頑張りましょう!」

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

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

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

SpringのModelクラスとは何ですか?

SpringのModelクラスは、コントローラーからビューにデータを渡すためのツールです。キーと値の形式でデータを管理し、ビューで簡単に利用できるようになります。

addAttributeメソッドはどのように使用しますか?

addAttributeメソッドを使用すると、Modelにデータを追加できます。例えば、キーに「message」、値に「こんにちは」というデータを追加して、ビューで表示できます。

ビューにデータを渡すための注意点はありますか?

キー名を一貫して使用することが重要です。また、ビューで参照する際に正しいキー名を指定する必要があります。

addAttributeメソッドで動的なデータを追加するにはどうすればいいですか?

条件分岐を使用して、状況に応じたデータをModelに追加することができます。例えば、ログイン状態に応じて異なるメッセージを設定することが可能です。

ThymeleafでModelからデータを表示するにはどうすればいいですか?

Thymeleafでは、th:text属性を使用してModelのデータを表示できます。例えば、タイトルやメッセージをHTMLに埋め込むことが可能です。

addAttributeメソッドで追加したデータが表示されない原因は何ですか?

キー名が一致していない、またはビューで正しく参照されていない可能性があります。コードを確認して修正してください。

動的に追加するデータに制限はありますか?

制限はありません。文字列、リスト、オブジェクトなど、さまざまなデータ型を追加することができます。

SpringのModelクラスとModelMapの違いは何ですか?

ModelMapは、Modelを拡張したクラスで、Mapのようにデータを操作できます。Modelクラスよりも柔軟なデータ管理が可能です。

ビューに渡すデータが多い場合、どのように整理すればよいですか?

データをカテゴリごとに整理し、キー名を一貫性のあるものにすると管理がしやすくなります。また、必要に応じてカスタムオブジェクトを使用するのも有効です。

Springでデータを渡す方法として他にどのような選択肢がありますか?

他にもModelMapやModelAndViewを使用する方法があります。それぞれの特徴を理解して、用途に応じて使い分けるとよいでしょう。

ModelAndViewを使うべき典型的なケースは何ですか?

処理の途中でビュー名を動的に切り替えたい、またはビュー名と値のセットを1つの戻り値で明示したい場合に適しています。転送先をコード上で分岐させるときに見通しが良くなります。

1つのコントローラーメソッドでModelとModelMapを同時に使っても大丈夫ですか?

動作はしますが可読性が下がります。どちらかに統一するのが推奨です。特に迷う理由がなければModelに揃えると保守しやすくなります。

Modelに詰めた値のスコープはどうなりますか?

基本はリクエストスコープです。リダイレクトをまたいで持ち回りたい場合はフラッシュ属性(RedirectAttributes)や@SessionAttributesを検討します。
カテゴリの一覧へ
新着記事
JavaのIndexOutOfBoundsExceptionを完全ガイド!初心者でも理解できる例外処理と回避方法
スッキリわかるJava入門 第4版|独学でもレッスンでも学べる完全ガイド
JavaのCookieクラスのgetCommentメソッドを解説!Servlet開発でクッキーの説明文を取得する方法
JavaのBufferedOutputStreamクラスのwriteメソッドを徹底解説!初心者でもわかるファイルへのバイナリ書き込み
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.3
Java&Spring記事人気No3
Spring Data JPA入門!findAll()やfindBy**()の使い方などデータベース操作の基礎を学ぶ
No.4
Java&Spring記事人気No4
Thymeleafのth:classappend属性の使い方を完全ガイド!初心者でもわかる動的クラス追加
No.5
Java&Spring記事人気No5
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.6
Java&Spring記事人気No6
Thymeleaf(タイムリーフ)入門!初心者でもわかるSpring Bootとテンプレートエンジンの使い方
No.7
Java&Spring記事人気No7
Springの@Repositoryアノテーションの使い方を徹底解説!初心者でもわかるSpringフレームワークのデータアクセス
No.8
Java&Spring記事人気No8
JavaのEnumクラスのordinalメソッドを徹底解説!初心者でもわかる列挙型の順序番号

💻 作業効率アップに

長時間のコーディングでも疲れにくい♪ 静音ワイヤレスマウス

Logicool Signature M750 を見る

※ Amazon広告リンク