Spring MVC에서 컨트롤러 메서드의 매개변수나 반환 값을 뷰(View) 에 전달하기 위해 사용되는 어노테이션.
컨트롤러의 매개변수로 전달되는 객체를 초기화하거나, 모델(Model) 에 데이터를 바인딩 할 때 사용됨
메서드 레벨에서 @ModelAttribute
를 사용하면 해당 메서드에서 반환된 객체가 자동으로 모델에 추가되어 뷰에서 사용될 수 있음
공통 데이터 추가
@Controller
public class UserController {
@ModelAttribute("commonData")
public String addCommonData() {
return "This is common data";
}
@GetMapping("/user")
public String getUserPage(Model model) {
// "commonData" 가 이미 모델에 추가되어 뷰에서 사용 가능
model.addAttribute("userData", "User-specific data");
return "userPage";
}
}
addCommonData()
메서드는 "commonData"
라는 이름으로 모델에 데이터를 추가하며, 이는 모든 뷰에서 사용 가능함
@ModelAttribute
는 컨트롤러 메서드의 매개변수에 사용되어, HTTP 요청으로부터 전달된 데이터를 특정 객체에 바인딩 함
폼 데이터 바인딩
@Controller
public class UserController {
@GetMapping("/register")
public String showReistrationForm(Model model) {
model.addAttribute("userForm", new UserForm());
return "register";
}
@PostMapping("/register")
public String registerUser(@ModelAttribute UserForm userForm) {
// userForm 객체는 폼 데이터로 자동으로 채워짐
// 등록 로직 수행
return "registrationSuccess";
}
}
여기서 UserForm
클래스는 다음과 같이 정의될 수 있음
public class UserForm {
private String username;
private String password;
// getters and setters
}
@ModelAttribute
는 UserForm
객체에 폼 데이터를 바인딩함. 폼에서 전송된 username
과 password
값이 UserForm
객체의 필드에 자동으로 매핑됨
경로 변수 바인딩
@Controller
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public String getUser(@PathVariable("id") Long userId, @ModelAttribute("user") User user) {
// user 객체에 요청 파라미터가 바인딩됨
// userId 로 사용자 데이터를 로드하여 user 객체에 설정할 수 있음
return "userDetail";
}
}