Ти можеш використовувати анотацію @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
}
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ