@ModelAttribute
는 Spring MVC에서 자주 사용되는 애노테이션으로, 컨트롤러 메서드의 파라미터 또는 리턴값에 바인딩된 객체를 처리하거나, 뷰에서 사용할 데이터를 모델에 추가하는 데 사용됩니다. 아래에서 두 가지 주요 사용 사례를 설명하겠습니다.
@ModelAttribute
는 요청 파라미터를 특정 객체에 바인딩하는 데 사용됩니다. HTTP 요청의 폼 데이터나 URL 쿼리 파라미터를 자바 객체에 자동으로 매핑합니다.
public class User {
private String name;
private int age;
// Getter & Setter
}
@Controller
public class UserController {
@PostMapping("/user")
public String createUser(@ModelAttribute User user) {
// 요청 파라미터를 User 객체에 매핑
System.out.println(user.getName());
System.out.println(user.getAge());
return "userView";
}
}
POST /user
Content-Type: application/x-www-form-urlencoded
name=John&age=25
name=John
은 user.name
에 매핑.age=25
는 user.age
에 매핑.Spring이 자동으로 객체를 생성하고 값을 설정해 줍니다.
@ModelAttribute
를 컨트롤러의 메서드 위에 선언하면, 해당 메서드의 반환값을 모든 뷰에서 사용할 수 있도록 모델에 자동 추가합니다.
@Controller
public class UserController {
@ModelAttribute("commonData")
public String populateCommonData() {
return "This is common data";
}
@GetMapping("/example")
public String examplePage() {
return "exampleView";
}
}
모든 뷰에서 commonData
라는 이름으로 데이터를 참조할 수 있습니다.
<p th:text="${commonData}"></p>
@ModelAttribute
로 매핑된 객체는 @Valid
와 함께 사용해 데이터 유효성을 검증할 수 있습니다.@RequestParam
과 비교해 복잡한 객체 매핑에 적합합니다.추가 학습 자료