モデル
@ModelAttribute
アノテーションを使用できます。
@RequestMapping
メソッドのメソッド引数で、モデルからObject
を作成またはアクセスし、WebDataBinder
を通じてそれをリクエストにバインドします。@Controller
または@ControllerAdvice
クラスのメソッドレベルのアノテーションとして、@RequestMapping
メソッド呼び出しの前にモデルを初期化するために使用します。戻り値をマークする
@RequestMapping
メソッドでは、モデル属性です。
このセクションでは、@ModelAttribute
メソッド(前述のリストの 2 番目の項目)について説明します。コントローラーは、@ModelAttribute
メソッドをいくつでも持つことができます。このようなメソッドはすべて、同じコントローラー内の @RequestMapping
メソッドの前に呼び出されます。@ModelAttribute
メソッドは、@ControllerAdvice
を介してコントローラー間で共有することもできます。詳細については、コントローラーのアドバイスのセクションを参照してください。
@ModelAttribute
メソッドには、柔軟なメソッドシグネチャーがあります。これらは、@ModelAttribute
自体またはリクエストボディに関連するものを除き、@RequestMapping
メソッドと同じ引数の多くをサポートします。
次の例は、@ModelAttribute
メソッドを示しています。
Java
Kotlin
@ModelAttribute
public void populateModel(@RequestParam String number, Model model) {
model.addAttribute(accountRepository.findAccount(number));
// add more ...
}
@ModelAttribute
fun populateModel(@RequestParam number: String, model: Model) {
model.addAttribute(accountRepository.findAccount(number))
// add more ...
}
次の例では、属性を 1 つだけ追加します。
Java
Kotlin
@ModelAttribute
public Account addAccount(@RequestParam String number) {
return accountRepository.findAccount(number);
}
@ModelAttribute
fun addAccount(@RequestParam number: String): Account {
return accountRepository.findAccount(number)
}
名前が明示的に指定されていない場合、Conventions (Javadoc) の javadoc に従って、Object 型に基づいてデフォルト名が選択されます。オーバーロードされた addAttribute メソッドを使用するか、@ModelAttribute の name 属性(戻り値用)を使用して、明示的な名前をいつでも割り当てることができます。 |
@ModelAttribute
を @RequestMapping
メソッドのメソッドレベルのアノテーションとして使用することもできます。その場合、@RequestMapping
メソッドの戻り値はモデル属性として解釈されます。戻り値がビュー名として解釈される String
でない限り、これは HTML コントローラーのデフォルトの動作であるため、通常は必要ありません。次の例に示すように、@ModelAttribute
はモデル属性名をカスタマイズすることもできます。
Java
Kotlin
@GetMapping("/accounts/{id}")
@ModelAttribute("myAccount")
public Account handle() {
// ...
return account;
}
@GetMapping("/accounts/{id}")
@ModelAttribute("myAccount")
fun handle(): Account {
// ...
return account
}