カテゴリ: Spring 更新日: 2026/03/31

SpringのModelAndViewクラスの使い方を完全ガイド!初心者でもわかるWebアプリ開発

SpringのModelAndView
SpringのModelAndView

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

生徒

「Springでビューとデータをまとめて扱えるクラスがあるって聞きました。それって何ですか?」

先生

「それはModelAndViewクラスのことですね。ビュー名とモデルデータをまとめて管理する便利なクラスです。」

生徒

「どうやって使うんですか?」

先生

「それでは、基本的な使い方から学んでいきましょう!」

1. ModelAndViewクラスとは?

「1. ModelAndViewクラスとは?」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

1. ModelAndViewクラスとは?
1. ModelAndViewクラスとは?

ModelAndViewは、Spring MVCのorg.springframework.web.servletパッケージに含まれるクラスで、コントローラーからビュー名と画面に表示したいデータを「セット」で返すための入れ物のような存在です。

Webアプリでは、コントローラーが「どの画面(ビュー)を表示するか」と「その画面にどんな情報(モデル)を渡すか」を決めます。ModelAndViewは、この2つをまとめて扱うためのクラスで、画面遷移とデータ受け渡しを分かりやすく整理してくれます。

イメージとしては、「表示するHTMLファイル名」と「ユーザー名やメッセージなどの表示データ」がセットになった伝票のようなものです。コントローラーはこの伝票(ModelAndView)を返し、Springがその内容をもとにビューを表示します。

例えば、挨拶メッセージを1つだけ画面に表示したい場合、ModelAndViewを次のように使います。


// 画面名と表示データをまとめて準備するイメージ
ModelAndView mav = new ModelAndView("hello");      // hello.html という画面を表示したい
mav.addObject("message", "こんにちは、Webアプリ開発!"); // 画面に渡したいメッセージ

このように、ModelAndViewを使うと「どのビューに、どんなデータを渡すのか」がコード上で一目で分かるようになります。詳しい書き方や実際のコントローラーでの使い方は、次の章で順番に見ていきましょう。

2. ModelAndViewの基本的な使い方

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

ここでは、いちばん基本的な「1つの画面に1つのメッセージを表示する」パターンで、ModelAndViewの使い方を確認してみましょう。

流れとしてはとてもシンプルで、①どのURLにアクセスされたか、②どの画面(ビュー)を表示するか、③その画面にどんなデータを渡すか、という3つをコントローラーのメソッドで決めていきます。


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

@Controller
public class HelloController {

    @GetMapping("/hello")
    public ModelAndView hello() {
        ModelAndView mav = new ModelAndView("hello"); // 表示したいビュー名(hello.html)を指定
        mav.addObject("message", "こんにちは、Springの世界へ!"); // 画面に渡したいメッセージを追加
        return mav; // まとめた情報を返す
    }
}

このコードでは、ブラウザから/helloというURLにアクセスされたとき、helloというビュー名を持つ画面(通常はhello.html)を表示するように指定しています。また、addObjectメソッドでmessageという名前のデータを登録し、その値として「こんにちは、Springの世界へ!」という文字列を渡しています。

画面側では、このmessageという名前を使ってメッセージを取り出して表示します。どのURLにアクセスされたら、どの画面を開き、その画面にどんな文字列や値を渡すのか――それを1か所でまとめて書けるのがModelAndViewの基本的な使い方です。プログラミング未経験の方は、まず「URL→画面→表示データ」をひとまとめにして返している、というイメージだけつかんでおけば十分です。

3. ModelAndViewの主なメソッド

3. ModelAndViewの主なメソッド
3. ModelAndViewの主なメソッド

ModelAndViewクラスには、以下のような便利なメソッドがあります:

  • setViewName(String viewName): ビュー名を設定します。
  • addObject(String attributeName, Object attributeValue): モデルデータを追加します。
  • getModelMap(): 現在のモデルデータを取得します。

これらのメソッドを組み合わせることで、柔軟にビューとデータを操作できます。

4. サンプル:複数データを渡す場合

「4. サンプル:複数データを渡す場合」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

4. サンプル:複数データを渡す場合
4. サンプル:複数データを渡す場合

複数のデータをビューに渡す場合も、addObjectを繰り返し使用するだけです。


@GetMapping("/details")
public ModelAndView details() {
    ModelAndView mav = new ModelAndView("details");
    mav.addObject("name", "John Doe");
    mav.addObject("age", 30);
    mav.addObject("email", "john.doe@example.com");
    return mav;
}

この例では、nameageemailの3つのデータがdetails.htmlビューに渡されます。

5. ModelAndViewを使うメリット

5. ModelAndViewを使うメリット
5. ModelAndViewを使うメリット

なぜModelAndViewを使うべきなのでしょうか?その理由をいくつか挙げます:

  • ビュー名とデータを一緒に管理できるため、コードが簡潔になります。
  • 複数のデータをまとめて渡す際に便利です。
  • コントローラーの戻り値としてそのまま使用できるため、処理が明確になります。

6. ModelAndViewの注意点

6. ModelAndViewの注意点
6. ModelAndViewの注意点

ModelAndViewを使用する際、以下の点に注意してください:

  • ビュー名は正確に記述する必要があります(例:テンプレートエンジンの設定に従う)。
  • データを正確に渡すために、addObjectの引数を確認してください。

7. ModelAndViewとRedirectの使い分け

「7. ModelAndViewとRedirectの使い分け」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

7. ModelAndViewとRedirectの使い分け
7. ModelAndViewとRedirectの使い分け

ModelAndViewはビューへの通常遷移で使用されますが、リダイレクト処理をしたい場合には少し工夫が必要です。

リダイレクトにはsetViewName("redirect:/パス")を使用します。


@GetMapping("/redirectSample")
public ModelAndView redirectSample() {
    ModelAndView mav = new ModelAndView();
    mav.setViewName("redirect:/hello");
    return mav;
}

このように記述することで、/helloにリダイレクトされます。リダイレクト時はモデルデータが引き継がれない点に注意しましょう。

8. ModelAndViewとModelの違い

8. ModelAndViewとModelの違い
8. ModelAndViewとModelの違い

Springでは、ModelAndViewの他にもModelModelMapを使ってデータを渡すことができます。これらの違いを理解しておくと、より柔軟なコーディングが可能になります。

  • ModelAndView:ビューとデータをまとめて返す。
  • Model:メソッド引数として使い、データのみを渡す。
  • ModelMapModelと似ており、Mapのように扱える。

初心者のうちはModelAndViewから始めて、徐々にModelModelMapにも慣れていくのがおすすめです。

9. Thymeleafとの連携でModelAndViewを活用

9. Thymeleafとの連携でModelAndViewを活用
9. Thymeleafとの連携でModelAndViewを活用

Spring BootでビューにThymeleafを使っている場合、ModelAndViewで渡したデータはテンプレート内でそのまま利用できます。

以下の例では、コントローラーから渡されたmessageを表示するHTMLです:


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello Page</title>
</head>
<body>
    <h1 th:text="${message}">ここにメッセージが表示されます</h1>
</body>
</html>

Thymeleafを使えば、ModelAndViewで渡したオブジェクトを${変数名}で簡単にテンプレート内に表示できます。

まとめ

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

まとめ
まとめ

この記事では、Spring Frameworkで使用されるModelAndViewクラスについて詳しく学びました。このクラスは、ビュー名とモデルデータを一元管理できる便利なクラスで、コントローラーからHTMLビューにデータを渡す際に非常に役立ちます。

特に、初心者が陥りやすいポイントや注意点を解説しながら、基本的な使い方や便利なメソッドを具体的に紹介しました。これにより、実際のWebアプリケーション開発での活用イメージがつかめたはずです。

実践的な例として、複数データを渡す方法やaddObjectメソッドの活用例も取り上げました。これらを理解することで、より効率的にSpringの機能を使いこなすことができるでしょう。

最後に、コードの簡潔さや保守性を高めるために、ModelAndViewを積極的に活用することをおすすめします。

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

生徒

「今日学んだModelAndViewクラス、すごく便利ですね!ビュー名とデータをまとめて管理できるなんて、効率的だと思いました。」

先生

「その通りです。特に、複数のデータをビューに渡すときや、テンプレートエンジンを使用する場合に威力を発揮します。」

生徒

「コード例を見て、簡単に使えそうだと思いました。ただ、注意点の部分も気をつけないといけないですね。」

先生

「その点を意識しておけば、Springを使った開発がますますスムーズになりますよ。これからも繰り返し練習して、慣れていきましょう!」

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

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

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

質問1: SpringのModelAndViewクラスは何に使うのですか?

回答: ModelAndViewクラスは、コントローラーからビュー(HTMLファイル)にデータを渡すために使います。ビュー名とデータを一緒に管理することで、Webアプリケーションの開発を簡潔に行うことができます。

質問2: ModelAndViewクラスを使うメリットは何ですか?

回答: 主なメリットは、ビュー名とモデルデータをまとめて管理できることです。コードがシンプルになり、複数データの管理やテンプレートエンジンとの連携がスムーズになります。

質問3: setViewNameメソッドは具体的に何をするのですか?

回答: setViewNameメソッドは、表示するビューの名前を指定します。たとえば、「hello」という名前を設定すれば、Springはhello.htmlというテンプレートを探してレンダリングします。

質問4: addObjectメソッドの使い方がよく分かりません。

回答: addObjectメソッドは、ビューに渡すデータを追加するために使います。第一引数にはデータの名前、第二引数にはデータそのものを指定します。たとえば、addObject("message", "こんにちは")とすると、ビューでmessageとして使用できます。

質問5: ModelAndViewを使う際の注意点は何ですか?

回答: ビュー名を正確に指定することと、addObjectでデータ名を間違えないようにすることです。また、テンプレートエンジン(例: Thymeleaf)によるビュー解決の設定にも注意が必要です。

質問6: ModelAndViewの代わりに他の方法も使えますか?

回答: はい、ModelMapを使う方法もあります。ただし、ModelAndViewはビュー名とデータを一括で管理できるため、特にシンプルな構造が求められる場合に便利です。

質問7: サンプルコードの@GetMappingはどのような役割がありますか?

回答: @GetMappingは、HTTPのGETリクエストを受け取るためのアノテーションです。これにより、指定されたURLにアクセスした際に対応するメソッドが実行されます。

質問8: 複数のデータをビューに渡すにはどうすればいいですか?

回答: addObjectメソッドを繰り返し使用することで、複数のデータを簡単に渡せます。たとえば、名前や年齢、メールアドレスなどを個別に追加できます。

質問9: SpringでのModelAndViewの使用例をもう少し知りたいです。

回答: たとえば、データベースから取得したデータをHTMLテーブルに表示する場合にもModelAndViewが使えます。ビュー名を設定し、取得したデータをaddObjectで渡すことで簡単に実現できます。

質問10: ビュー名に拡張子(.htmlなど)を含める必要はありますか?

回答: 通常、テンプレートエンジンが設定されていれば拡張子を省略できます。ただし、プロジェクトの設定によっては明示的に拡張子を指定する必要がある場合もあります。
カテゴリの一覧へ
新着記事
New1
Spring
Spring MVCのフォワードとリダイレクトの違いと使い分け完全解説!初心者向け
更新記事
New2
Spring
Spring Bootの初期テスト導入を完全ガイド!JUnit 5とSpring Boot Testの基本を初心者向けに解説
更新記事
New3
Java
Javaのラムダ式とStreamのreduce完全ガイド!初心者でもわかる集計処理の基本と使い方
更新記事
New4
Spring
Spring Bootプロジェクトの作成ガイド!EclipseとGradleを使った初心者向け手順
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Spring
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
No.3
Java&Spring記事人気No3
Java
Java開発環境「Eclipse(Pleiades)」のインストール方法とメリットを初心者向けに解説
No.4
Java&Spring記事人気No4
Spring
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.5
Java&Spring記事人気No5
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.6
Java&Spring記事人気No6
Spring
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.7
Java&Spring記事人気No7
Java
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法
No.8
Java&Spring記事人気No8
Spring
Spring BootのMultipartFile入門:ファイルアップロード・ダウンロードの実装方法と制限設定