@RequestParam("hoge")をメソッドの引数に使って1つ1つ受け取るのもいいですが、数が増えてくると1つのクラスにまとめたくなったりしますよね。そんな時に使えるのが@ModelAttributeアノテーション。
こんな入力フォームがあるとして
<!DOCTYPE html><html xmlns:th="http://www.thymeleaf.org"><head><metacharset="UTF-8" /><title>Insert title here</title></head><body><formmethod="post"action="/"><labelfor="name">名前:</label><inputname="name"type="text" /><br /><labelfor="age">年齢:</label><inputname="age"type="text" /><br /><inputtype="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; publicclass PersonForm { private String name; private String age; public String getName() { return name; } publicvoid setName(String name) { this.name = name; } public String getAge() { return age; } publicvoid 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; @Controllerpublicclass 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"; } }
お手軽お手軽。