Puedes utilizar la anotación @ModelAttribute
:
-
Como argumento de método en métodos con la anotación
@RequestMapping
para crear o acceder a un objeto desde el modelo y vincularlo a una solicitud a través deWebDataBinder
. -
Como anotación a nivel de método en clases marcadas con anotaciones
@Controller
o@ControllerAdvice
que ayuda a inicializar el modelo antes de llamar a un método con anotación de@RequestMapping
. -
Para que el método
@RequestMapping
indique que su valor de retorno es un atributo del modelo.
Esta sección cubre métodos; la anotación @ModelAttribute
es el segundo elemento de la lista anterior. Un controlador puede tener cualquier número de métodos marcados con la anotación @ModelAttribute
. Todos estos métodos se llaman antes que los métodos con la anotación @RequestMapping
en el mismo controlador. Un método anotado con @ModelAttribute
también se puede compartir entre controladores a través de la anotación @ControllerAdvice
.
Los métodos con la anotación @ModelAttribute
tienen firmas de método flexibles. Admiten muchos de los mismos argumentos que los métodos marcados con la anotación @RequestMapping
, excepto la anotación @ModelAttribute
en sí o cualquier cosa asociada con el cuerpo de la solicitud.
El siguiente ejemplo muestra un método anotado con @ModelAttribute
:
@ModelAttribute
public void populateModel(@RequestParam String number, Model model) {
model.addAttribute(accountRepository.findAccount(number));
// añadir más...
}
@ModelAttribute
fun populateModel(@RequestParam number: String, model: Model) {
model.addAttribute(accountRepository.findAccount(number))
// añadir más...
}
El siguiente ejemplo agrega solo un atributo:
@ModelAttribute
public Account addAccount(@RequestParam String number) {
return accountRepository.findAccount(number);
}
@ModelAttribute
fun addAccount(@RequestParam number: String): Account {
return accountRepository.findAccount(number)
}
Object
, como se explica en el javadoc en
Convenciones
. Siempre puedes asignar un nombre explícito usando la sobrecarga
addAttribute
o mediante el atributo
name
en la anotación
@ModelAttribute
(para el valor de retorno).
También puede utilizar la anotación @ModelAttribute
como una anotación a nivel de método para los métodos anotados con @RequestMapping
, en cuyo caso el valor de retorno del método anotado con @RequestMapping
se interpretará como un atributo del modelo. Por lo general, esto no es necesario ya que es la lógica predeterminada en los controladores HTML a menos que el valor de retorno sea una String
que de otro modo se interpretaría como el nombre de la vista. La anotación @ModelAttribute
también puede personalizar el nombre del atributo del modelo, como se muestra en el siguiente ejemplo:
@GetMapping("/accounts/{id}")
@ModelAttribute("myAccount")
public Account handle() {
// ...
return account;
}
@GetMapping("/accounts/{id}")
@ModelAttribute("myAccount")
fun handle(): Account {
// ...
return account
}
GO TO FULL VERSION