@ModelAttribute 는 크게 두가지 역할을 한다.
이 예시로 이해를 해보자.
/**
* @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";
}
@ModelAttribute - 요청 파라미터 처리
@ModelAttribute 가 Item 객체를 생성하고, 요청 파라미터의 값을 프로퍼티 접근법(setXXX)으로 입력해준다.
@ModelAttribute - Model 추가
Model 에 @ModelAttribute 로 지정한 객체(Item)를 자동으로 넣어준다.
즉 model.addAttribute("item", item) 을 써주지 않아도 자동으로 해준다는 소리!
💡 만약 아래 예시처럼 @ModelAttribute(”item”) 에서 (”item”)을 써주지 않는다면??
@PostMapping("/add")
public String addItemV3(@ModelAttribute Item item) {
itemRepository.save(item);
return "basic/item";
}
➡️ @ModelAttribute 에 (”item”) 이렇게 직접 명시해주지 않는다면 객체이름인 Item 에서 자동으로 앞글자만 소문자로 바꿔서 적용된다. 즉, Item → item, HelloData → helloData 이렇게 이름이 적용되므로 참고하자!
그리고 @ModelAttribute 자체도 생략가능..!!
@PostMapping("/add")
public String addItemV4(Item item) {
itemRepository.save(item);
return "basic/item";
}
➡️ Item 객체에 자동으로 @ModelAttribute 가 적용되어 item 이라는 이름으로 매칭되어 Model 객체에 넣어준다!
참고
'Spring' 카테고리의 다른 글
빈 스코프와 종류 (0) | 2022.07.03 |
---|---|
Thread Pool 이란 도대체 무엇인가! (0) | 2022.06.17 |
빈 생명주기 콜백에 대해 알아보자 (0) | 2022.06.04 |
조회 빈이 2개 이상일 때 해결방법! (0) | 2022.06.04 |
[Springboot] Execution failed for task ':test' 에러 해결방법 (0) | 2022.06.04 |
댓글