Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

Spring Bootでリクエストパラメータをオブジェクトで受け取る

$
0
0

@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";
    }
}

お手軽お手軽。


Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>