Puedes utilizar la anotación @ModelAttribute:
-
Como argumento de método en métodos con la anotación
@RequestMappingpara 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
@Controllero@ControllerAdviceque ayuda a inicializar el modelo antes de llamar a un método con anotación de@RequestMapping. -
Para que el método
@RequestMappingindique 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