Spring Boot ModelAttributeとRequestBodyの違い




Springでのパラメータの取得

Spring Bootのフレームワークでクライアントからのパラメターを取得するには下記2つの方法があります。

  1. GETメソッドの場合は@ModelAttribute
  2. POSTメソッドの場合は@RequestBody

以下使い方です。Kotlinで書いているのでKotlinを導入する場合は下記を参照してください。

関連記事:EclipseでSpring BootとKotlinの環境構築

@RestController
@RequestMapping("/user")
class UserController @Autowired constructor(private val userDao: UserDao) {

    /**
     * ユーザーを取得
     *
     * @param request リクエストパラメータクラス
     * @return ユーザー
     */
    @GetMapping
    fun getUser(@ModelAttribute request: GetUserRequest): GetUserResponse {
        return userDao.getById(request.userId)
    }

    /**
     * ユーザー名を更新
     *
     * @param request リクエストパラメータクラス
     * @return 更新結果
     */
    @RequestMapping(value = "/update_name", method = arrayOf(RequestMethod.POST))
    fun updateUserName(@RequestBody request: PostUserNameRequest): PostUserNameResponse {
        return userDao.updateNameById(request.userId, request.name)
    }
}

パラメータを受け取るクラスは下記のようにしています。

class GetUserRequest (

        var userId: Int = 0
)

class PostUserNameRequest (

        var userId: Int = 0,

        var name: String = "",
)

@GetMappingが付いた関数はGETメソッドとなり、クラス定義の上に書いてあるRequestMappingのパスに対して対応しています。クライアントから送られてくるGETパラメータを@ModelAttributeを指定することで受け取っています。

/user_nameはPOSTメソッドとして定義していて送られてくるbodyのデータを@RequstBodyを指定することで受け取っています。

このように@ModelAttributeと@RequestBodyをそれぞれ設定することでクライアントから送られてくるパラメータを取得できます。

合わせて読みたい

おすすめ書籍

JPAに関して体系的に学べる良い書籍だと思います。良くあるSpring系書籍ですとJPAは少ししか紹介がありませんが丸々一冊JPAに関してなので詳細な解説がされています。内容はJPAと他のORMとの比較から始まりセットアップ、実装の仕方まで幅広く網羅されています。これからJPAで開発を初めてみようかなと考えている方は一読することをオススメします!

Springの概要からインストール方法、各コア機能(Security, Sessionなど)の解説が体系的にまとめられています。2018年に出版されたばかりなので情報も新しいです。これからSpring Bootでアプリケーション開発をしたい方の最初に読む一冊としておすすめします。対象は初心者だけでなく上級者まで幅広く学べるので是非読んでみてください!

 

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です