SpringのModel addAllAttributesメソッドの使い方を完全解説!初心者でもわかる複数データの渡し方
生徒
「Spring Bootで画面に複数のデータをまとめて渡したいのですが、ひとつずつModelに追加する必要がありますか?」
先生
「複数のデータをまとめて追加したい場合は、org.springframework.ui.ModelのaddAllAttributesメソッドを利用できます。」
生徒
「普段使っているaddAttributeとは何が違うんですか?」
先生
「addAttributeは基本的にひとつの属性を追加するときに使い、addAllAttributesは複数の属性をまとめてModelへ追加するときに便利です。それでは、Spring MVCのModelの基本から順番に見ていきましょう。」
1. SpringのModelとは何かを初心者向けに理解しよう
Spring BootでWebアプリケーションを作っていると、Controllerで取得したデータをHTMLの画面へ表示したい場面が多くあります。例えば、商品名、価格、利用者名、お知らせ、商品一覧などをControllerからThymeleafのテンプレートへ渡す処理です。
このようなControllerと画面の間でデータを受け渡すときに利用されるのが、org.springframework.uiパッケージに用意されているModelインターフェースです。Spring MVCを学習する初心者にとって、ModelはControllerとViewをつなぐ重要な仕組みのひとつです。
Modelに登録したデータには名前が付けられ、画面側ではその名前を使って値を参照できます。例えばControllerで商品情報をModelへ登録しておけば、Thymeleafを使ったHTMLテンプレートで商品名や価格を表示できます。
Modelはorg.springframework.uiパッケージにあるインターフェースです。Spring BootのControllerからThymeleafなどのViewへデータを渡す場面でよく利用します。
Spring MVCでは、Controllerがリクエストを受け取り、必要な処理を行ってから表示する画面を決めます。その途中で画面表示に必要なデータをModelへ格納します。そのため、Modelの使い方を理解すると、Spring Bootで一覧画面、詳細画面、検索画面、入力確認画面などを作るときのデータの流れが理解しやすくなります。
2. addAllAttributesメソッドとは何をするメソッドなのか
addAllAttributesは、複数の属性をまとめてModelへ追加するためのメソッドです。Spring BootのControllerで画面へ渡したいデータが複数ある場合、それぞれを個別に登録する方法だけでなく、複数のデータをまとめて登録する方法として利用できます。
Modelでは、ひとつの属性を追加するときによくaddAttributeを利用します。例えば利用者名だけを画面へ渡したい場合であれば、addAttributeを使うだけで十分です。しかし、利用者名、画面タイトル、メッセージなど、複数の属性をあらかじめひとつに整理してからModelへ追加したい場合にはaddAllAttributesが便利です。
addAllAttributesには、Mapを受け取る形式とCollectionを受け取る形式があります。特に初心者が理解しやすいのはMapを使う方法です。Mapでは、画面側から参照するときの属性名と、その属性に対応する値を組み合わせて管理できます。
@GetMapping("/sample")
public String sample(Model model) {
Map<String, Object> data = new HashMap<>();
data.put("title", "商品一覧");
data.put("message", "商品を選択してください");
model.addAllAttributes(data);
return "sample";
}
この例では、titleとmessageという二つの属性をMapへ格納し、そのMapをaddAllAttributesへ渡しています。これによって複数の属性をまとめてModelへ追加できます。
大切なのは、addAllAttributesが新しい画面を表示するメソッドではないという点です。このメソッドの役割はModelへ属性を追加することです。Controllerが返す文字列によって表示するテンプレートを決め、そのテンプレートからModelに登録された属性を利用するという流れになります。
3. Mapを使って複数の属性をまとめて追加する方法
SpringのModelでaddAllAttributesを利用するときに覚えておきたいのが、Mapを使った複数属性の追加です。Mapは名前と値を組み合わせてデータを管理できるため、画面へ渡す属性をまとめる用途に向いています。
例えば商品詳細画面で、画面タイトル、商品名、カテゴリ名を表示するとします。それぞれをMapへ登録してからaddAllAttributesへ渡せば、一度の呼び出しでModelへ追加できます。
@Controller
public class ProductController {
@GetMapping("/product")
public String product(Model model) {
Map<String, Object> attributes = new HashMap<>();
attributes.put("pageTitle", "商品詳細");
attributes.put("productName", "ノートパソコン");
attributes.put("categoryName", "パソコン");
model.addAllAttributes(attributes);
return "product";
}
}
この処理では、pageTitle、productName、categoryNameという三つの属性がModelへ追加されます。MapのキーがModelの属性名として利用され、それぞれのキーに対応する値が画面へ渡されます。
Spring Boot初心者は、Mapのキーを画面でデータを呼び出すための名前と考えると理解しやすいでしょう。商品名をproductNameという名前で登録した場合、Thymeleaf側でもproductNameを使って値を参照できます。
addAllAttributesを使うメリットは、複数の属性がすでにMapとして整理されている場合に、その内容をまとめてModelへ追加できることです。Serviceなどから受け取った情報をMapとして管理している場合や、画面表示用の複数の値を一度整理してからModelへ渡したい場合にも利用できます。
初心者が覚えておきたい考え方
MapのキーがModelの属性名になり、Mapの値がその属性のデータになります。複数のキーと値を用意してaddAllAttributesへ渡すことで、複数の画面表示用データをまとめて追加できます。
4. addAllAttributesで渡した値をThymeleafで表示する方法
Spring BootでModelを使う目的のひとつは、Controllerで用意したデータをThymeleafのHTMLテンプレートへ渡すことです。addAllAttributesでModelへ追加した属性も、addAttributeで追加した属性と同じように画面側から参照できます。
例えばControllerでpageTitle、productName、categoryNameという属性をModelへ追加した場合、Thymeleafではそれぞれの属性名を使って画面に表示できます。
<h1 th:text="${pageTitle}">画面タイトル</h1>
<div class="card">
<div class="card-body">
<p th:text="${productName}">商品名</p>
<p th:text="${categoryName}">カテゴリ名</p>
</div>
</div>
Controller側のMapで指定したキーと、Thymeleaf側で参照する属性名を対応させることがポイントです。名前が異なっていると、期待しているデータを画面に表示できません。
Spring MVCの処理を理解するときは、Controllerだけを見るのではなく、Modelへどのような名前でデータを追加し、Thymeleafがどの名前で受け取っているのかを確認しましょう。この対応関係が分かるようになると、画面に値が表示されないときの原因も探しやすくなります。
addAllAttributesを使ったからといって、Thymeleaf側に特別な書き方が必要になるわけではありません。Modelへ追加された後は通常の属性として扱えるため、画面側ではaddAttributeで登録された値と同じ考え方で利用できます。
5. Collectionを使ったaddAllAttributesの使い方
ModelのaddAllAttributesには、MapだけでなくCollectionを受け取る形式も用意されています。Collectionは複数のオブジェクトをまとめて扱うための仕組みで、ListなどもCollectionの仲間です。
CollectionをaddAllAttributesへ渡した場合は、Mapのように自分で属性名と値を組み合わせて登録する方法とは考え方が異なります。渡されたそれぞれのオブジェクトについて、Springが型などをもとに属性名を判断してModelへ追加します。
@GetMapping("/profile")
public String profile(Model model) {
List<Object> attributes = new ArrayList<>();
attributes.add("Spring入門");
attributes.add(100);
model.addAllAttributes(attributes);
return "profile";
}
Collection形式は属性名が自動的に決められるため、初心者が画面表示用の属性を明確な名前で管理したい場合には、Map形式やaddAttributeのほうが処理内容を読み取りやすいことがあります。
特にSpring Bootの学習を始めたばかりであれば、まずaddAttributeで属性名と値の関係を理解し、次にMapを使ったaddAllAttributesを学ぶとよいでしょう。そのあとでCollection形式を確認すると、それぞれの違いを整理しやすくなります。
Collection形式が存在することは覚えておきたいポイントですが、複数の画面表示用データへ分かりやすい属性名を付けたい場合は、どの名前でViewへ渡されるのかが明確になる書き方を選ぶことも大切です。
6. addAttributeとaddAllAttributesの違いと使い分け
SpringのModelを学習すると、addAttributeとaddAllAttributesのどちらを使えばよいのか迷うことがあります。基本的には、追加する属性の数や、追加したいデータがどのような形で用意されているかを考えると使い分けやすくなります。
| メソッド | 主な用途 | 初心者向けの考え方 |
|---|---|---|
| addAttribute | ひとつの属性を追加する | 属性名と値を個別に指定したい場合に分かりやすい |
| addAllAttributes | 複数の属性をまとめて追加する | MapやCollectionとして用意された複数のデータを追加したい場合に便利 |
例えば画面タイトルだけをModelへ追加するのであれば、addAttributeを使ったほうが処理の意図を理解しやすくなります。一方、複数の画面表示用データがすでにMapに格納されているのであれば、addAllAttributesを使うことでまとめて追加できます。
@GetMapping("/user")
public String user(Model model) {
model.addAttribute("title", "会員情報");
Map<String, Object> userData = new HashMap<>();
userData.put("userName", "山田太郎");
userData.put("prefecture", "東京都");
userData.put("status", "利用中");
model.addAllAttributes(userData);
return "user";
}
このようにaddAttributeとaddAllAttributesは、どちらか一方しか使えないわけではありません。同じControllerの処理で組み合わせることもできます。ひとつだけ追加したい属性はaddAttribute、まとまった複数の属性はaddAllAttributesという使い方も可能です。
メソッド名が似ているため難しく感じるかもしれませんが、ひとつずつ追加するのか、複数をまとめて追加するのかという違いから覚えると分かりやすくなります。
7. 同じ属性名がある場合の動作とmergeAttributesとの違い
addAllAttributesを実際のSpring Bootアプリケーションで利用するときには、すでにModelへ登録されている属性と同じ名前の属性を追加する場合についても理解しておくと便利です。
addAllAttributesは、渡された属性をModelへ追加するためのメソッドです。同じ属性名がすでに存在する場合には、その属性が置き換えられることがあります。そのため、複数の処理からModelへデータを登録している場合は、属性名が重複していないかを確認することが大切です。
例えば、先にtitleという属性をModelへ追加しておき、そのあとaddAllAttributesで渡すMapにもtitleというキーが含まれている場合を考えます。この場合、後から追加する値によって既存の属性が置き換えられる可能性があるため、どの値を最終的に画面へ表示したいのかを意識する必要があります。
ModelにはmergeAttributesというメソッドもあります。addAllAttributesとの重要な違いは、既存の属性をどのように扱うかという点です。mergeAttributesでは、同じ名前の属性がすでにModelに存在する場合、その既存の属性を残し、まだ存在していない属性を追加するという使い方ができます。
| メソッド | 複数属性の追加 | 同じ属性名が存在する場合の考え方 |
|---|---|---|
| addAllAttributes | 可能 | 追加する属性によって既存の値が置き換えられることがある |
| mergeAttributes | 可能 | すでに存在する属性を残し、存在しない属性を追加する |
Spring MVC初心者の段階では、まずaddAttributeとaddAllAttributesの違いを理解すれば十分ですが、実務でModelへ複数のデータを追加するようになると、既存属性を上書きしたいのか、それとも残したいのかを考える場面があります。そのときにmergeAttributesとの違いを知っていると、目的に合ったメソッドを選択しやすくなります。
8. 商品一覧を使ったaddAllAttributesの実践例
Spring BootのWebアプリケーションでは、単純な文字列だけではなく、商品一覧などのオブジェクトのリストを画面へ渡すことがあります。addAllAttributesを利用すれば、一覧データと画面タイトルや説明文などをまとめてModelへ登録することもできます。
@Controller
public class ItemController {
@GetMapping("/items")
public String items(Model model) {
List<String> items = List.of(
"ノートパソコン",
"キーボード",
"マウス"
);
Map<String, Object> attributes = new HashMap<>();
attributes.put("pageTitle", "商品一覧");
attributes.put("items", items);
attributes.put("message", "商品を確認してください");
model.addAllAttributes(attributes);
return "items";
}
}
この例では、画面タイトル、商品一覧、メッセージという異なる種類のデータをMapへまとめています。addAllAttributesを使うことで、これらを一度にModelへ追加できます。
実際のSpring Data JPAを使ったアプリケーションでは、データベースから取得したエンティティの一覧をMapへ格納して画面へ渡すことも考えられます。商品一覧だけでなく、検索条件、検索結果件数、画面タイトルなどを一緒に渡したい場合にも同じ考え方を応用できます。
ただし、複数の値をまとめられるからといって、すべてのControllerで必ずaddAllAttributesを使う必要はありません。属性が数個しかなく、それぞれの意味を明確に記述したい場合にはaddAttributeを個別に使う方法も読みやすい書き方です。Spring MVCでは、処理の目的やデータの持ち方に合わせて選択することが大切です。
9. addAllAttributesで値が表示されないときの確認ポイント
Spring BootでaddAllAttributesを使ったのにThymeleafの画面へ値が表示されない場合は、いくつかのポイントを順番に確認すると原因を見つけやすくなります。
最初に確認したいのは、Mapへ登録したキーとThymeleafで参照している属性名が一致しているかという点です。ControllerではproductNameとして登録しているのに、HTML側で別の名前を指定していれば、期待した値を取得できません。大文字と小文字を含めて属性名を確認しましょう。
次に、ControllerのメソッドがModelを正しく受け取っているか、addAllAttributesを呼び出しているかを確認します。また、Controllerが返しているView名と、実際に表示したいThymeleafテンプレートが対応しているかも重要です。
addAllAttributesで確認したいポイント
- ModelをControllerの引数として受け取っているか
- Mapに必要な属性が登録されているか
- Mapのキーと画面側の属性名が一致しているか
- addAllAttributesを呼び出しているか
- Controllerが正しいView名を返しているか
- 同じ属性名を別の処理で追加していないか
- Collection形式では属性名が自動的に決まることを理解しているか
Spring MVCのModelで問題が起きたときは、ControllerからViewまでのデータの流れを順番に追いかけることが重要です。Controllerでどの名前の属性を登録したのか、その属性がModelへ追加されたのか、Thymeleafではどの名前を参照しているのかという順番で確認すると整理しやすくなります。
org.springframework.ui.ModelのaddAllAttributesは、複数の画面表示用データをまとめて追加できる便利なメソッドです。特にMap形式では属性名と値の対応が分かりやすく、商品一覧、会員情報、検索結果、画面タイトル、メッセージなど複数の情報を扱うSpring BootのWebアプリケーションで活用できます。
初心者はまずModelがControllerからViewへデータを渡すために利用されることを理解し、addAttributeでひとつの属性を追加する方法を覚えましょう。そのうえで複数の属性をまとめて扱うaddAllAttributes、既存属性との重複を考慮するmergeAttributesという順番で学習すると、それぞれの役割を整理しながらSpring MVCのModelを理解できます。
まとめ
Spring BootでWebアプリケーションを開発するとき、Controllerで用意したデータをThymeleafなどの画面へ渡すために重要な役割を持つのが、org.springframework.uiパッケージのModelインターフェースです。Modelを理解すると、Spring MVCにおけるControllerとViewのつながりが分かりやすくなり、商品一覧画面、会員詳細画面、検索結果画面、入力確認画面などを作成するときの基本的なデータの流れを整理できるようになります。
Modelは、画面へ表示したい値を一時的に登録しておくために利用します。Controllerで取得した商品名、価格、利用者名、検索結果、メッセージなどをModelへ追加しておくことで、ThymeleafのHTMLテンプレートからそれらの値を参照できます。Spring Boot初心者は、ModelをControllerからViewへデータを運ぶための入れ物のようなものとして考えると理解しやすいでしょう。
Modelへ属性を追加するときによく利用されるのがaddAttributeメソッドです。addAttributeは、属性名と値を指定してひとつのデータを追加するときに分かりやすい方法です。一方、今回学習したaddAllAttributesメソッドは、複数の属性をまとめてModelへ追加したい場合に利用できます。画面へ渡す情報がMapなどですでに整理されている場合には、addAllAttributesを使うことで複数のデータを一度にModelへ登録できます。
addAllAttributesは複数の画面表示用データをまとめて追加できる
addAllAttributesの基本として覚えておきたいのがMapを利用する方法です。Mapでは、キーと値を組み合わせてデータを管理します。Spring MVCのModelへMapを追加する場合、MapのキーがModelの属性名となり、Mapの値が実際に画面へ渡されるデータになります。
例えば商品詳細画面で、画面タイトル、商品名、カテゴリ名、説明文などを表示したい場合、それぞれの情報をMapへ登録してからaddAllAttributesへ渡すことができます。画面表示に必要な情報をひとまとまりとして扱えるため、すでに複数の属性がMapとして用意されている処理では便利です。
@GetMapping("/detail")
public String detail(Model model) {
Map<String, Object> attributes = new HashMap<>();
attributes.put("pageTitle", "商品詳細");
attributes.put("productName", "ノートパソコン");
attributes.put("categoryName", "パソコン");
model.addAllAttributes(attributes);
return "detail";
}
この処理では、pageTitle、productName、categoryNameという複数の属性がModelへ追加されます。重要なのは、addAllAttributesが画面を表示するためのメソッドではないという点です。addAllAttributesの役割はModelへ属性を追加することであり、どのHTMLテンプレートを表示するかはControllerの戻り値によって決まります。
Spring BootのControllerを読むときは、どのデータを取得しているのか、どの名前でModelへ登録しているのか、最後にどのViewを返しているのかという流れを確認すると分かりやすくなります。この流れを意識すると、Spring MVCの仕組みを単なるメソッドの暗記ではなく、データがどのように移動しているのかという視点から理解できます。
ThymeleafではMapのキーに対応する属性名を使う
addAllAttributesでModelへ追加された値は、Thymeleaf側では通常のModel属性として利用できます。addAttributeを使って追加した値と、addAllAttributesを使って追加した値で、Thymeleaf側の基本的な参照方法が変わるわけではありません。
Controller側でproductNameという名前を使ったのであれば、Thymeleaf側でもproductNameという属性名を指定します。属性名が一致していなければ値を正しく表示できないため、Spring Bootで画面にデータが表示されない場合は、ControllerとHTMLの両方を確認することが大切です。
<div class="card">
<div class="card-body">
<h3 th:text="${pageTitle}">商品詳細</h3>
<p th:text="${productName}">商品名</p>
<p th:text="${categoryName}">カテゴリ名</p>
</div>
</div>
Spring MVC初心者がつまずきやすいのは、Controller側だけを確認して原因を探してしまうことです。Modelを使ったデータ受け渡しでは、Controllerで属性を登録し、その属性をView側で参照するという二つの処理がつながっています。MapのキーとThymeleafの属性名、大文字と小文字、View名などを順番に確認することが、トラブル解決の基本になります。
addAttributeとaddAllAttributesは目的に合わせて使い分ける
addAttributeとaddAllAttributesは似た役割を持っていますが、どちらが常に優れているというものではありません。ひとつの属性を追加するときや、それぞれの属性名と値をコード上ではっきり確認できるようにしたい場合にはaddAttributeが分かりやすい方法です。
一方、複数の属性がMapなどにまとめられている場合にはaddAllAttributesが便利です。例えば画面タイトル、利用者名、都道府県、利用状態などがMapとして用意されているのであれば、そのMapをまとめてModelへ追加できます。同じController内でaddAttributeとaddAllAttributesを組み合わせて利用することも可能です。
@GetMapping("/member")
public String member(Model model) {
model.addAttribute("title", "会員詳細");
Map<String, Object> memberData = new HashMap<>();
memberData.put("memberName", "山田太郎");
memberData.put("prefecture", "大阪府");
memberData.put("status", "利用中");
model.addAllAttributes(memberData);
return "member";
}
この例のように、単独で分かりやすく追加したい値はaddAttribute、すでにまとまっている複数の値はaddAllAttributesという使い方ができます。Spring BootでControllerを書くときは、単にコードを短くすることだけを目的にするのではなく、あとから読んだときに何を画面へ渡しているのかが理解しやすい書き方を選ぶことも重要です。
Collection形式とMap形式の違いも理解しておこう
addAllAttributesにはMapを受け取る形式だけではなく、Collectionを受け取る形式もあります。Collectionを渡した場合は、Springがオブジェクトの型などをもとに属性名を判断してModelへ追加します。そのため、自分で分かりやすい属性名を指定したい場合にはMap形式のほうが理解しやすいことがあります。
Spring Bootを学び始めた段階では、最初からすべての使い方を覚える必要はありません。まずaddAttributeを使って属性名と値の対応を理解し、その次にMapを使ったaddAllAttributesで複数属性を追加する方法を学び、さらに必要になった段階でCollection形式を確認すると整理しやすくなります。
ModelとaddAllAttributesを覚えるポイント
- ModelはControllerからViewへデータを渡すときに利用する
- addAttributeは属性を個別に追加するときに使いやすい
- addAllAttributesは複数の属性をまとめて追加できる
- MapではキーがModelの属性名として利用される
- ThymeleafではModelへ登録した属性名を使って値を参照する
- Collection形式では属性名が自動的に決められる
- 属性名の重複やView側との名前の違いに注意する
既存の属性を扱うときはmergeAttributesとの違いも重要
Modelへ複数の属性を追加する処理では、すでに同じ名前の属性が登録されている場合にも注意が必要です。addAllAttributesでは、追加しようとしている属性名がすでにModelに存在すると、既存の値が置き換えられることがあります。
一方、ModelにはmergeAttributesというメソッドも用意されています。mergeAttributesは、すでに存在する属性を残しながら、まだ存在していない属性を追加したい場合に利用できます。addAllAttributesとmergeAttributesの違いは、既存の属性をどのように扱いたいのかという視点で考えると理解しやすくなります。
小さなサンプルでは属性名の重複を意識する場面は少ないですが、実際のSpring Bootアプリケーションでは、共通処理や別の処理からModelへ属性が追加されることがあります。そのため、値が思っていた内容と違う場合には、同じ属性名を複数回追加していないかも確認しましょう。
実際のSpring Boot開発では一覧画面や検索画面にも応用できる
addAllAttributesは単純な文字列だけでなく、商品一覧や検索結果などの複数データをModelへ渡す場合にも利用できます。例えば商品検索画面では、検索結果の商品一覧、入力された検索キーワード、検索結果件数、画面タイトル、メッセージなど複数の情報を同時に表示することがあります。
このような場面で複数の画面表示用データがMapとしてまとめられていれば、addAllAttributesを使ってModelへ一括で追加できます。Spring Data JPAでデータベースから取得した商品一覧や会員一覧についても、他の画面表示情報と一緒にModelへ渡すという考え方を応用できます。
@GetMapping("/search")
public String search(Model model) {
List<String> products = List.of(
"ノートパソコン",
"デスクトップパソコン"
);
Map<String, Object> attributes = new HashMap<>();
attributes.put("pageTitle", "商品検索結果");
attributes.put("products", products);
attributes.put("resultCount", products.size());
model.addAllAttributes(attributes);
return "search";
}
Spring MVCでは、Controller、Model、Viewの役割を分けて考えることが重要です。Controllerはリクエストを受け取って処理を進め、ModelはViewへ渡すデータを保持し、Viewは受け取ったデータを使って画面を表示します。addAllAttributesは、この中でModelへ複数の属性を登録するときに利用するメソッドです。
Spring Bootの学習では、メソッド名だけを覚えるよりも、どの場面で必要になるのかをイメージすることが大切です。画面にひとつだけ値を渡すならaddAttribute、複数の値がMapとしてまとまっているならaddAllAttributes、既存の属性を残しながら不足している属性だけを追加したいならmergeAttributesというように整理すると、それぞれの役割を覚えやすくなります。
また、画面に値が表示されない場合は、Modelへ値を追加する処理だけでなく、Mapのキー、Thymeleafの属性名、Controllerが返すView名、属性の重複なども確認しましょう。Spring BootでModelを扱う処理は、ControllerからThymeleafまで一連の流れとして確認することが、問題を見つける近道になります。
org.springframework.ui.ModelとaddAllAttributesの使い方を理解しておけば、Spring MVCで複数のデータを画面へ渡す処理が読みやすくなります。商品一覧、会員情報、検索結果、画面タイトル、メッセージなど、Webアプリケーションでは一つの画面に複数の情報を表示する機会が多いため、Modelへの属性追加はSpring Boot開発の基本として身につけておきたい知識です。
生徒
「addAllAttributesは、Modelに複数のデータをまとめて追加したいときに使うメソッドなんですね。」
先生
「その通りです。特にMapを使うと、属性名と値を組み合わせて複数のデータを整理し、そのままModelへまとめて追加できます。」
生徒
「MapのキーがThymeleafから参照するときの属性名になることも分かりました。画面に値が出ないときは、この名前が一致しているか確認すればいいんですね。」
先生
「はい。Controllerで登録した属性名とThymeleafで参照する名前は必ず確認しましょう。Modelへ正しく追加できていても、画面側の名前が違えば期待した表示にはなりません。」
生徒
「addAttributeとaddAllAttributesは、どちらか一方だけを使うものではないんですよね。」
先生
「そうです。ひとつの値ならaddAttribute、複数の値がMapとしてまとまっているならaddAllAttributesというように、データの状態やコードの読みやすさに合わせて使い分けられます。同じControllerの中で両方を利用しても問題ありません。」
生徒
「同じ属性名がすでにある場合は、addAllAttributesとmergeAttributesの違いも考える必要があるんですね。」
先生
「その点も大切です。既存の値を置き換えてよいのか、それとも既存の属性を残したいのかによって選択するメソッドが変わります。まずはModelがControllerとViewをつなぐ役割を持つことを押さえ、そのうえでaddAttribute、addAllAttributes、mergeAttributesの違いを整理していきましょう。」
生徒
「これならSpring Bootの商品一覧や検索結果をThymeleafへ渡す処理も、何をしているのか追いかけられそうです。」
先生
「Controllerでデータを用意し、Modelに属性を登録し、Thymeleafがその属性を表示するという流れを意識すれば理解しやすくなります。addAllAttributesは、その流れの中で複数のデータを効率よく登録するために活用できるメソッドです。」