LoginSignup
0
0

Controllerメソッドの引数にアノテーションを付けない場合について

Posted at

@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は、

  1. @Controller内で定義された@ModelAttributeメソッド
  2. @SessionAttributes(セッション内でに存在するもの)
  3. リクエストパラメータ内に存在するもの
  4. デフォルトコンストラクタ
  5. パラメータを初期化したものを引数としたコンストラクタ

が格納される
このとき、Modelに作成されたインスタンスがバインディング(Model.addAtribute)される。
バインディングされるモデルの初期のインスタンス名は、クラス名の最初の1文字目を小文字にしたものである。(@ModelAttribute()でname属性を指定することで変更可能)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0