@RequestParam("hoge")をメソッドの引数に使って1つ1つ受け取るのもいいですが、数が増えてくると1つのクラスにまとめたくなったりしますよね。そんな時に使えるのが@ModelAttributeアノテーション。
こんな入力フォームがあるとして
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8" /> <title>Insert title here</title> </head> <body> <form method="post" action="/"> <label for="name">名前:</label><input name="name" type="text" /><br /> <label for="age">年齢:</label><input name="age" type="text" /><br /> <input type="submit" value="送信" /> </form> <div th:if="${person} != null"> <span>入力情報</span> <div> <span th:text="${person.name}">ほげほげ</span> <span th:text="${person.age}">99</span> <span>歳</span> </div> </div> </body> </html>
nameとageという入力項目があるので、こんなクラスの入れ物を用意します。
package helloboot.modelattr.controllers; public class PersonForm { private String name; private String age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
あとは、このPersonFormクラスをModelAttributeアノテーションをつけてメソッドの引数に渡すだけでOK。
package helloboot.modelattr.controllers; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class HelloController { @RequestMapping(name = "/", method = { RequestMethod.GET }) public String get() { return "index"; } @RequestMapping(name = "/", method = { RequestMethod.POST }) public String post(@ModelAttribute PersonForm form, Model model) { model.addAttribute("person", form); return "index"; } }
お手軽お手軽。