728x90
서버로 데이터를 전송하는 방식
- content-type: application/x-www-form-urlencoded
- 메시지 바디에 쿼리 파리미터 형식으로 전달
- itemName=itemA&price=10000&quantity=10 예) 회원 가입, 상품 주문, HTML Form 사용
상품 등록 처리 Controller
V1 : @RequestParam + Model 사용
@PostMapping("/add")
public String addItemV1(
@RequestParam String itemName,
@RequestParam int price,
@RequestParam Integer quantity,
Model model
) {
Item item = new Item(itemName, price, quantity);
itemRepository.save(item);
model.addAttribute("item", item);
return "basic/item";
}
- 상품 상세에서 사용한 item.html 뷰 템플릿을 그대로 재활용한다
V2 : @ModelAttribute로 모델에 담아서 한번에 처리
//@PostMapping("/add")
public String addItemV2(
@ModelAttribute("item") Item item
//, Model model
) {
//지정한 이름으로 모델에 담아 뷰에 반환한다.
itemRepository.save(item);
//model.addAttribute("item", item); //자동 추가, 생략 가능
return "basic/item";
}
- @ModelAttribute - 요청 파라미터 처리
- @ModelAttribute 는 Item 객체를 생성하고, 요청 파라미터의 값을 프로퍼티 접근법(setXxx)으로 입력해준다
- @ModelAttribute - Model 추가
- 모델(Model)에 @ModelAttribute 로 지정한 객체를 자동으로 넣어준다
- 모델에 데이터를 담을 때는 이름이 필요하다. 이름은 @ModelAttribute에 지정한 name(value) 속성을 사용한다.
- 만약 다음과 같이 @ModelAttribute 의 이름을 다르게 지정하면 다른 이름으로 모델에 포함된다
V3 : @ModelAttribute name 속성 생략
@PostMapping("/add")
public String addItemV3(
@ModelAttribute Item item
) {
//속성의 이름을 지우게 된다면 클래스 이름의 첫글자만 소문자로 바꾼 이름으로 넣어준다
itemRepository.save(item);
return "basic/item";
}
- @ModelAttribute 의 이름을 생략하면 모델에 저장될 때 클래스명을 사용한다. 이때 클래스의 첫 글자만 소문자로 변경해서 등록한다
V4 : ModelAttribute 전체 생략
@PostMapping("/add")
public String addItemV4(
Item item //@ModelAttribute 생략 가능
) {
itemRepository.save(item);
return "basic/item";
}
- @ModelAttribute 자체도 생략가능하다.
728x90
'스프링 MVC 1편 (백엔드 웹 개발 핵심 기술)' 카테고리의 다른 글
| Ch07. 스프링 MVC(웹 페이지 만들기) - PRG Post/Redirect/Get (0) | 2022.03.08 |
|---|---|
| Ch07. 스프링 MVC(웹 페이지 만들기) - 상품 수정 (0) | 2022.03.08 |
| Ch07. 스프링 MVC(웹 페이지 만들기) - 상품 등록 폼 (0) | 2022.03.08 |
| Ch07. 스프링 MVC(웹 페이지 만들기) - 상품 상세 (0) | 2022.03.08 |
| Ch07. 스프링 MVC(웹 페이지 만들기) - 상품 목록(타임리프) (0) | 2022.03.08 |