Spring Controllerにおける@ModelAttributeと@RequestBodyの違い


SpringBoot(Spring MVC)では、クライアント側からControllerに値を渡すときに2つの方法があります。
それが@ModelAttributeと@RequestBodyです。

@ModelAttribute

クライアント側が値をx-www-form-urlencodedで送信するときに使用します。

@RequestBody

クライアント側が値をJSONで送信するときに使用します。

@RequestMapping("/api/awesome")
@RestController
public class AwesomeController {

	@Inject
	private MessageServiceSpec service;

	@RequestMapping("/save")
	@ResponseStatus(code = HttpStatus.OK)
	public void sendMessage(@RequestBody SomeDto obj) {
		service.sendMessage(obj);
	}
}

x-www-form-urlencodedで送信しようとしているのに@RequestBodyで取ろうとしても取れないので注意しましょう。(クライアントサイドエンジニアとのコミュニケーション必須!)

あと、@RequestBody、@ModelAttributeの書き忘れに注意しましょう(;´Д`)
疲れてたりすると意外に忘れます。


1 件のコメント

  1. ピンバック: Spring Controllerの@PathVariableと@RequestParamの使い分け | Permanent Til

コメントは受け付けていません。