@ModelAttribute
annotation을 사용할 수 있습니다.
@RequestMapping
메소드의 메소드 인수에서 모델의 Object
를 생성 또는 액세스하고 WebDataBinder
를 통해 요청에 바인딩합니다.
@RequestMapping
메서드 호출 전에 모델을 초기화하는 데 도움이 되는 @Controller
또는 @ControllerAdvice
클래스의 메서드 수준 annotation으로 사용됩니다.
반환 값을 표시하는 @RequestMapping
메소드에는 모델 속성이 있습니다.
이 섹션에서는 이전 목록의 두 번째 항목인 @ModelAttribute
메서드에 대해 설명합니다. 컨트롤러에는 @ModelAttribute
메서드가 얼마든지 있을 수 있습니다. 이러한 모든 메소드는 동일한 컨트롤러의 @RequestMapping
메소드보다 먼저 호출됩니다. @ModelAttribute
메서드는 @ControllerAdvice
를 통해 컨트롤러 간에 공유될 수도 있습니다. 자세한 내용은 컨트롤러 advice 섹션을 참조하세요.
@ModelAttribute
메소드에는 유연한 메소드 서명이 있습니다. @ModelAttribute
자체나 요청 본문과 관련된 항목을 제외하고 @RequestMapping
메서드와 동일한 인수를 많이 지원합니다.
다음 예제에서는 @ModelAttribute
메서드를 보여줍니다.
@ModelAttribute
public void populateModel(@RequestParam String number, Model model) {
model.addAttribute(accountRepository.findAccount(number));
// add more ...
}
다음 예에서는 하나의 속성만 추가합니다.
@ModelAttribute
public Account addAccount(@RequestParam String number) {
return accountRepository.findAccount(number);
}
[Note]
이름이 명시적으로 지정되지 않은 경우Conventions
에 대한 javadoc에 설명된 대로Object
type에 따라 기본 이름이 선택됩니다. 오버로드된addAttribute
메서드를 사용하거나@ModelAttribute
(반환 값의 경우)의name
속성을 통해 항상 명시적인 이름을 할당할 수 있습니다.
@RequestMapping
메소드의 메소드 레벨 annotation으로 @ModelAttribute
를 사용할 수도 있습니다. 이 경우 @RequestMapping
메소드의 반환 값은 모델 속성으로 해석됩니다. 이는 반환 값이 뷰 이름으로 해석되는 String
이 아닌 한 HTML 컨트롤러의 기본 동작이므로 일반적으로 필요하지 않습니다. @ModelAttribute
는 다음 예제와 같이 모델 속성 이름을 사용자 정의할 수도 있습니다.
@GetMapping("/accounts/{id}")
@ModelAttribute("myAccount")
public Account handle() {
// ...
return account;
}