モデル
Modelオブジェクト
SpringのモデルはSpring MVCフレームワークの一部で、コントローラーで処理したModelオブジェクトをビューに渡します。
コントローラーメソッドの引数で定義
コントローラーでモデルを使用するには、アクションメソッドの引数にModelオブジェクトを宣言します。
public String メソッド名(Model model) {
}
addAttribute()
コントローラーからビューにデータを受け渡すには、Model.addAttribute() メソッドを利用します。 引数に key と value を設定することで、Viewでオブジェクトが利用できます。
Model.addAttribute(key, value);
Modelの利用
Modelオブジェクトで処理
引数にModelオブジェクトを追加
index() メソッドの引数に、Modelオブジェクトを指定します。
controllers/HomeController.java
...
//Modelコーディングで自動インポート
import org.springframework.ui.Model;
...
@Controller
public class HomeController {
@GetMapping("/")
// 引数にModelクラスのオブジェクト
public String index(Model model) {
return "home/index";
}
}
- 引数にModelをコーディングすると、Modelクラスが自動インポートされます。
オブジェクトの受け渡し
addAttribute() で、ビューにキーmessageでオブジェクトを受け渡します。
@Controller
public class HomeController {
@GetMapping("/")
public String index(Model model) {
String message = "My News";
//ビューにデータ受け渡し
model.addAttribute("title", title);
return "home/index";
}
}
ビュー表示
ビューファイル「index.html」で th:textプロパティを追加し、addAttribute() メソッドで渡したオブジェクト「title」を設定します。
templates/home/index.html
<main layout:decorate="layouts/default" layout:fragment="contents">
<div>
<!-- オブジェクト表示 -->
<h1 class="pt-3 pb-3" th:text="${title}"></h1>
...
</div>
...
</main>
結果

ModelAndView
ModelAndViewとは
ModelAndViewは、コントローラコントローラがモデルとビューの情報を結合してまとめて管理するためのSpring MVCのクラスです。SpringのModelAndViewを利用すると、モデルとビューの両方の情報を保持でき、柔軟な処理ができます。
ModelAndViewの利用方法
アクションメソッドの引数にModelAndViewオブジェクトを定義し、戻り値として返します。
public ModelAndView メソッド名(ModelAndView view) {
//処理
return view;
}
ModelAndViewのメソッド
ModelAndViewでは、addObject() とsetViewName() がよく利用されるメソッドです。
addObject()
ModelAndViewにオブジェクトを追加するには、addObject() メソッドで設定します。
ModelAndView.addObject("key", "value");
@Controller
public class MyController {
@RequestMapping("/example")
public ModelAndView example(ModelAndView view) {
modelAndView.addObject("message", "Hello, Spring!");
return view;
}
}
setViewName()
setViewName() メソッドでも、ビュー名を設定できます。
ModelAndView.setViewName("ビュー名");
@Controller
public class MyController {
@RequestMapping("/example")
public ModelAndView example(ModelAndView view) {
modelAndView.addObject("message", "Hello, Spring!");
//templates/sample/example.html をテンプレート
modelAndView.setViewName("sample/example");
return view;
}
}
ModelAndViewで処理
「HomeController」の index() を、ModelAndViewで処理するよう修正します。
@Controller
public class HomeController {
@GetMapping("/")
//データ型をModelAndViewに変更
public ModelAndView index(ModelAndView view) {
String title = "My News";
//ビューデータの受け渡し処理変更
view.addObject("title", title);
//ビュー名の設定
view.setViewName("home/index");
//ModelAndViewを返す
return view;
}
}
Modelオブジェクトと同様の結果となります。
結果

リダイレクト
リダイレクトとは
リダイレクト(Redirect)は、Webページのアクセスを別のURLに転送する方法です。リダイレクトを利用する目的はさまざまなで使用されます。
ウェブページの移動
Webページが移動したとき、古いURLから新しいURLへのリダイレクトすることで、ユーザーが自動的に新しい場所に誘導できます。Webアプリが過剰なトラフィックで処理できないときに、別のサーバーにリダイレクトできます。
データ処理後の移動
Webアプリのプログラムでデータ処理後に、別のページにリダイレクトするのに利用します。これによりユーザにたくさんの操作をさせない、バグの少ないアプリ開発ができます。
認証とセキュリティ
認証が必要なページにアクセスするとき、ログインページなどにリダイレクトします。セキュリティ上の理由から、特定のリソースやページへのアクセス制限が必要です。
エラーハンドリング
存在しないページやリソースにアクセスしたとき、エラーページを表示する代わりに、別のリソースやページへのリダイレクトできます。
Springのリダイレクト
リダイレクトする場合は、setViewName() に「redirect:」をつけたURLパスで設定します。
ModelAndView.setViewName("redirect:リダイレクト先のURLパス");
リダイレクト処理
アクションメソッド cancel() を追加し、トップページにリダイレクトしてみましょう。
@GetMapping("/cancel")
public ModelAndView cancel(ModelAndView view) {
view.setViewName("redirect:/");
return view;
}