반응형
해당 게시글은 김영한님 MVC 강의 1편을 듣고 작성한 게시글입니다!
1️⃣ Model 객체란?
Model 객체는 Controller에서 생성된 데이터를 담아 View로 전달할 때 사용하는 객체이다.
MVC 패턴에서 Model의 역할을 수행한다.
2️⃣ @RequestParam 어노테이션
@ModelAttribute를 알아보기 전에 @RequestParam에 대해 알아보자.
@PostMapping("/add")
public String addItemV1(@RequestParam String itemName,
@RequestParam int price,
@RequestParam Integer quantity,
Model model){
Item item = new Item();
item.setItemName(itemName);
item.setPrice(price);
item.setQuantity(quantity);
itemRepository.save(item);
model.addAttribute("item", item);
return "basic/item";
}
@RequestParam("가져올 데이터의 이름") [데이터 타입] [데이터를 담을 변수] 와 같이 사용할 수 있다.
하지만 @RequestParam을 통해 변수를 하나씩 받는다면, 각각의 코드를 일일이 작성해야 한다는 불편함이 존재한다. 이를 @ModelAttribute를 이용해 해결해보자!
3️⃣ @ModelAttribute 어노테이션
@ModelAttribute는 HTTP Body 내용과 HTTP 파라미터의 값들을 Getter, Setter, 생성자를 통해 주입하기 위해 사용한다.
@ModelAttribute를 사용하면 코드를 더 간략화 할 수 있다!
@ModelAttribute 사용법
@PostMapping("/add")
public String addItemV2(@ModelAttribute("item") Item item){
itemRepository.save(item);
return "basic/item";
}
위 코드로 item 요소를 불러와 Item 객체인 item 변수에 저장할 수 있다.
@ModelAttribute 이름 생략
@PostMapping("/add")
public String addItemV3(@ModelAttribute Item item){
itemRepository.save(item);
return "basic/item";
}
위 코드와 같이 @ModelAttribute의 괄호 안의 이름을 생략할 수 있다.
그러면 모델에 저장하는 과정에서 클래스명을 사용한다. 클래스의 첫 글자를 소문자로 변경하여 등록한다.
@ModelAttribute 생략
@PostMapping("/add")
public String addItemV4(Item item){
itemRepository.save(item);
return "basic/item";
}
ModelAttribute 어노테이션을 생략할 수도 있다.
하지만@RequestParam도 생략이 가능하여 혼동하기 쉬우며, @ModelAttribute를 직관적으로 보여주는 것이 좋으므로 생략하는 것을 권장하지는 않는다.
반응형
'Java > Spring' 카테고리의 다른 글
[Spring] JPA에 대해 알아보자! (0) | 2023.03.31 |
---|---|
[Spring] 비즈니스 로직을 처리하는 패턴 (0) | 2023.03.31 |
[Spring] Spring vs Spring Boot (0) | 2023.03.22 |
[Spring] 테스트 코드에 대해 알아보자! (0) | 2023.03.22 |
[Spring] Spring 프로젝트 생성하기 (0) | 2023.03.20 |