|
对于最新稳定版本,请使用 Spring Framework 7.0.6! |
模型
你可以使用 @ModelAttribute 注解:
-
在
xref page方法的方法参数上, 用于从模型中创建或访问一个Object,并通过WebDataBinder将其绑定到请求。 -
作为
@Controller或@ControllerAdvice类中的方法级注解,用于在调用任何@RequestMapping方法之前帮助初始化模型。 -
在
@RequestMapping方法上,用于标记其返回值是一个模型属性。
本节讨论@ModelAttribute方法——即前述列表中的第二项。
一个控制器可以包含任意数量的@ModelAttribute方法。所有这些方法都会在同一个控制器中的@RequestMapping方法之前被调用。@ModelAttribute方法还可以通过@ControllerAdvice在多个控制器之间共享。更多详情请参见控制器通知(Controller Advice)一节。
@ModelAttribute 方法具有灵活的方法签名。它们支持许多与 @RequestMapping 方法相同的参数,但不包括 @ModelAttribute 本身或任何与请求体相关的参数。
以下示例展示了一个 @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 ...
}
以下示例仅添加一个属性:
-
Java
-
Kotlin
@ModelAttribute
public Account addAccount(@RequestParam String number) {
return accountRepository.findAccount(number);
}
@ModelAttribute
fun addAccount(@RequestParam number: String): Account {
return accountRepository.findAccount(number)
}
当未显式指定名称时,将根据 Object 类型选择一个默认名称,如 Conventions 的 Javadoc 中所述。
您始终可以通过使用重载的 addAttribute 方法,或通过 @ModelAttribute 上的 name 属性(针对返回值)来分配一个显式名称。 |
你也可以在 @ModelAttribute 方法上将 @RequestMapping 用作方法级别的注解,
此时 @RequestMapping 方法的返回值将被解释为模型属性。
这通常不是必需的,因为在 HTML 控制器中这是默认行为,
除非返回值是一个 String,否则该字符串会被解释为视图名称。
@ModelAttribute 还可以自定义模型属性的名称,如下例所示:
-
Java
-
Kotlin
@GetMapping("/accounts/{id}")
@ModelAttribute("myAccount")
public Account handle() {
// ...
return account;
}
@GetMapping("/accounts/{id}")
@ModelAttribute("myAccount")
fun handle(): Account {
// ...
return account
}