個人的に気になって探してみたので正確ではないかもしれません。
ユーザーが送った値を受け取る時、@MdelAttributeまたは@RequestBodyなどを使ったが、特にこの二つが似ているようで混乱したので整理してみようと思う。
@RequestBody
- RESTful APIを使用したり、JSON/XML形式でデータをやり取りする際に主に使用する。
- 最近、フロントエンドの場合はSPA(Single Page Application)が多いが、SPAはCSR(Client Side Rendering)で、つまり動的に作られるところがクライアントなので、サーバからデータを受け取る時はJSONとREESTful APIを多く使うので、それで最近@RequestBodyをたくさん使うというようだと思った。
@ModelAttribute
- HTMLフォームを通じてデータを送信する際に主に使用する。
- Field単位で精巧なバインディングが適用される。 すなわち、特定フィールドがバインディングされなくても残りのフィールドは正常バインディングされ、Validatorを使った検証も適用できる。
- TymeleafのようなMPAでフォームを介してデータを送信する場合、エラーが発生すると、どの項目を書き間違えたのか普通画面に表示していたので、バインディングされないフィールドがあっても検証できる@ModelAttributeの方が良いと思った。