오봉이와 함께하는 개발 블로그
스프링 MVC 1 - @ModelAttribute 본문
@ModelAttribute
@PostMapping("/add")
public String addItemV1(@RequestParam("itemName") String itemName,
@RequestParam("price") int price,
@RequestParam("quantity") 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"; // model로 넣은 item을 basic/item 경로로 넣어줌
}
/**
* @ModelAttribute("item") Item item
* model.addAttribute("item", item); 자동 추가
* */
@PostMapping("/add")
public String addItemV2(@ModelAttribute("item") Item item) {
itemRepository.save(item);
// model.addAttribute("item", item); -> 자동 추가, 생략 가능
return "basic/item"; // model로 넣은 item을 basic/item 경로로 넣어줌
}
addItemV1
과 addItemV2
는 똑같은 기능을 한다.
@ModelAttribute - 요청 파라미터 처리
@ModelAttribute
는 Item
객체를 생성하고, 요청 파라미터의 값을 프로퍼티 접근법(setXxx)으로 입력해준다.
@ModelAttribute - Model 추가
@ModelAttribute
는 중요한 한가지 기능이 더 있는데, 바로 모델(Model)에 @ModelAttribute
로 지정한 객체를 자동으로 넣어준다.
model.addAttribute("item", item) 가 주석처리 되어 있어도 잘 동작한다.
모델에 데이터를 담을 때는 이름이 필요하다.
이름은 @ModelAttribute
에 지정한 name(value)
속성을 사용한다.
만약 @ModelAttribute
의 이름을 다르게 지정하면 다른 이름으로 모델에 포함된다.
@ModelAttribute("hello") Item item
-> 이름을 hello 로 지정 -> model.addAttribute("hello", item);
결과적으로 모델에 hello
이름으로 저장하게 된다.
ModelAttribute 이름 생략
/**
* @ModelAttribute name 생략 가능
* model.addAttribute(item); 자동 추가, 생략 가능
* 생략시 model에 저장되는 name은 클래스명 첫글자만 소문자로 등록 Item -> item
* */
@PostMapping("/add")
public String addItemV3(@ModelAttribute Item item) {
itemRepository.save(item);
return "basic/item";
}
@ModelAttribute
의 이름을 생략할 수 있다.@ModelAttribute
의 이름을 생략하면 모델에 저장될 때 클래스명을 사용한다.
이때 클래스의 첫글자만 소문자로 변경해서 등록한다.
@ModelAttribute Item item
은 모델에 자동 추가되는 이름은 item이 된다.
ModelAttribute 전체 생략
/**
* @ModelAttribute 자체 생략 가능
* model.addAttribute(item) 자동 추가
* */
@PostMapping("/add")
public String addItemV4(Item item) {
itemRepository.save(item);
return "basic/item";
}
String, int, Integer 등 단순 타입이 오면 @RequestParam
이 적용되고, 나머지 타입들이 파라미터로 들어오면 @ModelAttribute
가 적용되어 대상 객체는 모델에 자동 등록된다.
나머지 사항은 V3과 동일하다.
출처 : 인프런 김영한 지식 공유자님 강의 - 스프링 MVC 1편 백엔드 웹 개발 핵심 기술
'BE > Spring' 카테고리의 다른 글
스프링 MVC 2 - 메시지, 국제화 (0) | 2022.08.18 |
---|---|
스프링 MVC 1 - PRG(Post/Redirect/Get), RedirectAttribute (0) | 2022.08.15 |
스프링 MVC 1 - 요청 매핑 핸들러 어탭터 구조 (0) | 2022.08.15 |
스프링 MVC 1 - HTTP 메시지 컨버터 (0) | 2022.08.15 |
스프링 MVC 1 - 응답(정적 리소스, 뷰 템플릿) (0) | 2022.08.14 |