Spring MVC와 모델
- 모델(Model): Spring MVC에서는 Model 객체를 통해 컨트롤러에서 뷰(Thymeleaf 같은)로 데이터를 전달합니다. 즉, 컨트롤러에서 데이터를 모델에 추가하면, 해당 데이터는 뷰에서 접근할 수 있게 됩니다.
- @ModelAttribute: 이 어노테이션은 메서드의 매개변수로 사용될 때, Spring이 해당 타입의 객체를 자동으로 생성하고, 이를 뷰에서 사용할 수 있도록 해줍니다. 그러나, GET 요청에서는 해당 객체가 자동으로 모델에 추가되지 않습니다.
GET 요청에서의 처리
- GET 요청: 만약 GET 요청에서 @ModelAttribute를 사용하면, Spring이 AccommodationRequestDto 객체를 생성하지만, 그것이 모델에 추가되지 않기 때문에 뷰에서는 이 객체를 사용할 수 없게 됩니다.
예시 설명
- 아래와 같은 코드:
- 여기서는 accommodationRequestDto 객체가 생성되지만, 모델에 추가되지 않기 때문에 Thymeleaf에서 th:object="${accommodationRequestDto}"로 접근할 수 없습니다.
@GetMapping("/register")
public String showRegisterForm(@ModelAttribute AccommodationRequestDto accommodationRequestDto) {
return "host/room_register";
}
- 모델에 추가하는 방법:
- 이 경우에는 AccommodationRequestDto 객체가 모델에 추가되므로, Thymeleaf에서는 th:object="${accommodationRequestDto}"를 사용하여 해당 객체의 필드를 참조할 수 있습니다.
@GetMapping("/register")
public String showRegisterForm(Model model) {
model.addAttribute("accommodationRequestDto", new AccommodationRequestDto());
return "host/room_register";
}
결론
- 모델에 추가: Thymeleaf에서 객체를 사용하려면 반드시 모델에 추가해야 합니다.
- @ModelAttribute의 한계: GET 요청 시 @ModelAttribute는 객체를 생성하지만, 모델에 자동으로 추가되지 않으므로, 사용하고 싶다면 직접 모델에 추가해줘야 한다는 점입니다.