Spring BootのModelAndViewを徹底解説!使い方から応用まで詳しく解説
こんにちは。ゆうせいです。
Spring BootでWebアプリケーションを開発するとき、画面にデータを渡して表示させる方法はいくつかあります。その中でも、ModelAndView
は 「データ(Model)」と「画面(View)」を一緒に管理する」 方法の一つです。
この記事では、
ModelAndView
とは何か?- どんな場面で使うのか?
- 実際のコード例
Model
やRedirectAttributes
との違い
などを詳しく解説します。
1. ModelAndView
とは?
ModelAndView
は、Spring MVCで利用されるクラスで、データ(Model)とビュー(View)をまとめて扱える のが特徴です。
通常、Spring Bootでは以下の3つの方法でビューにデータを渡せます。
方法 | 説明 | 主な用途 |
---|---|---|
ModelAndView | Model(データ)とView(画面)をセットで管理する | 画面遷移とデータセットをまとめて扱う |
Model | データだけを扱う | 画面名は String で返す場合 |
RedirectAttributes | リダイレクト時にデータを渡す | リダイレクト時に一時的にデータを保持する |
2. ModelAndView
の基本的な使い方
2.1 コントローラでの基本的な書き方
Spring Bootでは、Controller
クラスで ModelAndView
を使うことで、データと画面の指定を同時に行えます。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class SampleController {
@GetMapping("/hello")
public ModelAndView hello() {
ModelAndView mav = new ModelAndView();
mav.setViewName("hello"); // 表示するビュー(hello.html)
mav.addObject("message", "こんにちは、Spring Boot!"); // ビューに渡すデータ
return mav;
}
}
2.2 ModelAndView
の主なメソッド
メソッド | 説明 |
---|---|
setViewName(String viewName) | 表示するテンプレート(HTMLやJSP)を指定 |
addObject(String key, Object value) | データをビューに渡す |
getViewName() | 設定されたビュー名を取得 |
getModel() | 設定されたデータを取得 |
3. 実際にビューと連携してみる
次に、Spring Bootで ModelAndView
を使って Thymeleafのテンプレート と連携する例を紹介します。
3.1 Thymeleafのテンプレートを用意
src/main/resources/templates/hello.html
に以下のようなHTMLを作成します。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello Page</title>
</head>
<body>
<h1 th:text="${message}">デフォルトメッセージ</h1>
</body>
</html>
3.2 動作確認
http://localhost:8080/hello
にアクセスこんにちは、Spring Boot!
というメッセージが表示される
これで、ModelAndView
を使ってデータとビューを連携できました。
4. ModelAndView
の応用編
4.1 複数のデータを渡す
1つのビューに対して複数のデータを渡すことも可能です。
@GetMapping("/multi")
public ModelAndView multiData() {
ModelAndView mav = new ModelAndView("multi");
mav.addObject("title", "複数データ");
mav.addObject("message", "これは複数のデータを渡すサンプルです");
return mav;
}
ビュー (multi.html
) では、以下のようにデータを表示できます。
<h1 th:text="${title}"></h1>
<p th:text="${message}"></p>
4.2 フォームと組み合わせる
Spring Bootのフォーム送信でも ModelAndView
を利用できます。
フォーム画面 (form.html
)
<form action="/submit" method="post">
<input type="text" name="name">
<button type="submit">送信</button>
</form>
コントローラ
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@PostMapping("/submit")
public ModelAndView submit(@RequestParam("name") String name) {
ModelAndView mav = new ModelAndView("result");
mav.addObject("name", name);
return mav;
}
結果表示 (result.html
)
<p th:text="'あなたの名前は ' + ${name} + ' です。'"></p>
5. ModelAndView
を使うべき場面
Spring Bootでは Model
を使うことが一般的ですが、ModelAndView
が適しているケースもあります。
5.1 ModelAndView
を使うべき場合
- ビューとデータをセットで管理したいとき
- プログラムの可読性を高めたいとき
- 複数のデータをまとめて管理したいとき
5.2 Model
を使うべき場合
- シンプルにデータだけ渡したいとき
- ビュー名をメソッドの戻り値で指定する場合
例えば、以下のように Model
を使う場合は、ModelAndView
は不要です。
@GetMapping("/simple")
public String simple(Model model) {
model.addAttribute("message", "シンプルなデータ渡し");
return "simpleView";
}
6. まとめ
今回はSpring Bootの ModelAndView
について詳しく解説しました。
ModelAndView
は データとビューをまとめて管理 できるsetViewName()
で 表示するビューを指定 するaddObject()
で データをビューに渡すModel
との使い分けが大事
ModelAndView
を使いこなすと、Spring BootのWeb開発がよりスムーズになります。実際の開発で活用してみてください。ください!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。