Model

Dev.Hammy·2024년 4월 3일
0

반응형 스택에서 이에 상응하는 내용 보기

@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;
}

0개의 댓글