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

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

SpringのModelAndView
SpringのModelAndView

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

生徒

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

先生

「それは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の基本的な使い方

以下に、ModelAndViewの基本的な使用例を示します。


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"); // ビュー名を指定
        mav.addObject("message", "こんにちは、Springの世界へ!"); // モデルデータを追加
        return mav;
    }
}

このコードでは、/helloにアクセスすると、hello.htmlビューが表示され、そこにmessageデータが渡されます。

3. ModelAndViewの主なメソッド

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

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

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

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

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の使い分け

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など)を含める必要はありますか?

回答: 通常、テンプレートエンジンが設定されていれば拡張子を省略できます。ただし、プロジェクトの設定によっては明示的に拡張子を指定する必要がある場合もあります。

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

Spring Framework超入門をAmazonで見る

※ Amazon広告リンク

カテゴリの一覧へ
新着記事
New1
Servlet
JavaのHttpServletRequestクラスを初心者向けに徹底解説!
更新記事
New2
Thymeleaf
Thymeleafのth:fragmentを使ったテンプレートの再利用方法を完全ガイド!初心者でもわかる使い方
更新記事
New3
Thymeleaf
Thymeleaf th:ifとは?使い方と条件分岐のコツを解説
更新記事
New4
Spring
Spring Bootの@Profileとspring.profiles.activeの使い方を完全ガイド!初心者向けプロファイル活用術
新規投稿
人気記事
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
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.4
Java&Spring記事人気No4
Spring
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.5
Java&Spring記事人気No5
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.6
Java&Spring記事人気No6
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.7
Java&Spring記事人気No7
Java
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法
No.8
Java&Spring記事人気No8
JSP
JSPでCSSやJSを読み込む基本!外部ファイルのパス指定に注意しよう

💻 作業効率アップに

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

Logicool Signature M750 を見る

※ Amazon広告リンク