@GetMapping(@PostMapping)でアノテーションされたメソッド(Controllerメソッド)に一般的な値を入れると@RequestParam
が、自作クラスなど非一般的な値を入れると@ModelAttribute
が自動的に付与される(または付与された扱いになる?)。
一般的かどうかはBeanUtils#isSimpleProperty
で判定される。
定義はこちら
https://docs.spring.io/spring-framework/docs/6.1.6/javadoc-api/org/springframework/beans/BeanUtils.html#isSimpleValueType(java.lang.Class)
つまりは、@RequestParam("name") String name
は、単純にString name
に置き換え可能(変数名をクエリパラメータのキーと一致させる必要あり)
@ModelAttribute
は、
- @Controller内で定義された@ModelAttributeメソッド
- @SessionAttributes(セッション内でに存在するもの)
- リクエストパラメータ内に存在するもの
- デフォルトコンストラクタ
- パラメータを初期化したものを引数としたコンストラクタ
が格納される
このとき、Modelに作成されたインスタンスがバインディング(Model.addAtribute
)される。
バインディングされるモデルの初期のインスタンス名は、クラス名の最初の1文字目を小文字にしたものである。(@ModelAttribute()でname属性を指定することで変更可能)