Вы можете использовать аннотацию @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
}
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ