Ти можеш використовувати анотацію @ModelAttribute:
-
Як аргумент методу в методах з анотацією
@RequestMappingдля створення або доступу до об'єкта з моделі та прив'язки його до запиту черезWebDataBinder. -
Як анотацію на рівні методу в класах, позначених анотаціями
@Controllerабо@ControllerAdvice, яка допомагає ініціалізувати модель перед викликом методу з анотацією@RequestMapping. -
Для методу
@RequestMapping, щоб відзначити, що його значення, що повертається, є атрибутом моделі.
У цьому розділі розглянуто методи, анотування @ModelAttribute — другий пункт у попередньому списку. Контролер може мати будь-яку кількість методів, позначених анотацією @ModelAttribute. Усі такі методи викликаються перед методами з анотацією @RequestMapping у тому контролері. Метод, анотований @ModelAttribute, також може бути спільно використаний контролерами через анотацію @ControllerAdvice.
Методи з анотацією @ModelAttribute мають гнучкі сигнатури методів. Вони підтримують багато з тих же аргументів, що й методи, позначені анотацією @RequestMapping, за винятком самої анотації @ModelAttribute або всього, що пов'язано з тілом запиту.
У цьому прикладі показаний метод, анотований @ModelAttribute:
@ModelAttribute
public void populateModel(@RequestParam String number, Model model) {
model.addAttribute(accountRepository.findAccount(number));
// додаємо більше ...
}
@ModelAttribute
fun populateModel(@RequestParam number: String, model: Model) {
model.addAttribute(accountRepository.findAccount(number))
// додаємо більше ...
}
У наступному прикладі додається лише один атрибут:
@ModelAttribute
public Account addAccount(@RequestParam String number) {
return accountRepository.findAccount(number);
}
@ModelAttribute
fun addAccount(@RequestParam number: String): Account {
return accountRepository.findAccount(number)
}
Object, як пояснюється в javadoc по
Conventions. Завжди можна присвоїти явне ім'я за допомогою перевантаженого методу
addAttribute або через атрибут
name в анотації
@ModelAttribute (для значення, що повертається).
Ти також можеш використовувати анотацію @ModelAttribute як анотацію на рівні методу для методів, анотованих @RequestMapping, і в цьому випадку повертається значення методу, анотованого @RequestMapping , інтерпретуватиметься як атрибут моделі. Зазвичай це не потрібно, оскільки це логіка роботи за замовчуванням в HTML-контролерах, якщо тільки значення, що повертається не є String, яка в іншому випадку буде інтерпретована як ім'я подання. Анотація @ModelAttribute може також налаштовувати ім'я атрибута моделі, як показано в наведеному нижче прикладі:
@GetMapping("/accounts/{id}")
@ModelAttribute("myAccount")
public Account handle() {
// ...
return account;
}
@GetMapping("/accounts/{id}")
@ModelAttribute("myAccount")
fun handle(): Account {
// ...
return account
}
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ