Spring Bootの@RequestBody、@ModelAttributeを活用してControllerで色々なデータを受け取る

Spring BootのControllerでデータを受け取る方法をご紹介します。便利なアノテーション@RequestBody、@ModelAttributeを活用します。

引数に@RequestBodyをつけてClassを指定すると、jsonデータを受け取ることができます。このように書きます。ControllerがRestControllerで他のプロジェクトからRESTでClassデータを受け取ることも出来ます。

@PostMapping(path = "/sample")
public String example3(@RequestBody SampleBean samplebean) {
  return "sample";
}

上記のメソッドにはこのようにアクセスします。

$ curl -X POST -H "Content-Type: application/json" -d '{"name":"taro", "age":"10"}' http://localhost:8080/sample

また、引数にを@ModelAttributeつけると、HTMLのformからデータを受け取ることができます。このように書きます。

@PostMapping(path = "/sample")
public String example3(@ModelAttribute SampleBean samplebean) {
  return "sample";
}

@RequestBodyはクライアント側からClass(JSON)を受け取るのに対し@ModelAttributeはクライアント側から受けたデータを指定した型にバインドします。

データがx-www-form-urlencoded形式でしか送れない場合などは、@RequestBodyでなく@ModelAttributeで受信します。

x-www-form-urlencoded形式は、HTMLフォームからの送信の際、クライアントがWebサーバーに送信するContent-Type名の一つです。