| For the latest stable version, please use Spring Framework 6.2.12! | 
Model
You can use the @ModelAttribute annotation:
- 
On a method argument in @RequestMappingmethods to create or access anObjectfrom the model and to bind it to the request through aWebDataBinder.
- 
As a method-level annotation in @Controlleror@ControllerAdviceclasses that help to initialize the model prior to any@RequestMappingmethod invocation.
- 
On a @RequestMappingmethod to mark its return value is a model attribute.
This section discusses @ModelAttribute methods — the second item in the preceding list.
A controller can have any number of @ModelAttribute methods. All such methods are
invoked before @RequestMapping methods in the same controller. A @ModelAttribute
method can also be shared across controllers through @ControllerAdvice. See the section on
Controller Advice for more details.
@ModelAttribute methods have flexible method signatures. They support many of the same
arguments as @RequestMapping methods, except for @ModelAttribute itself or anything
related to the request body.
The following example shows a @ModelAttribute method:
- 
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 ...
}The following example adds only one attribute:
- 
Java 
- 
Kotlin 
@ModelAttribute
public Account addAccount(@RequestParam String number) {
	return accountRepository.findAccount(number);
}@ModelAttribute
fun addAccount(@RequestParam number: String): Account {
	return accountRepository.findAccount(number)
}| When a name is not explicitly specified, a default name is chosen based on the Objecttype, as explained in the javadoc forConventions.
You can always assign an explicit name by using the overloadedaddAttributemethod or
through thenameattribute on@ModelAttribute(for a return value). | 
You can also use @ModelAttribute as a method-level annotation on @RequestMapping methods,
in which case the return value of the @RequestMapping method is interpreted as a model
attribute. This is typically not required, as it is the default behavior in HTML controllers,
unless the return value is a String that would otherwise be interpreted as a view name.
@ModelAttribute can also customize the model attribute name, as the following example shows:
- 
Java 
- 
Kotlin 
@GetMapping("/accounts/{id}")
@ModelAttribute("myAccount")
public Account handle() {
	// ...
	return account;
}@GetMapping("/accounts/{id}")
@ModelAttribute("myAccount")
fun handle(): Account {
	// ...
	return account
}