회원 등록, 상품 등록과 같이 값이 한번에 넘어오는 경우 @ModelAttribute를 사용할 수 있다.
@ModelAttribute의 기능
프로퍼티
getUsername(), setUsername()과 같은 메서드는 username이라는 프로퍼티를 가지고 있다..
getXxx->xxx, setXxx->xxx
@ModelAttribute는 해당 프로퍼티를 사용해 지정된 객체에 값을 넣어준다.
바인딩 오류
지정한 타입과 들어온 타입이 다르면 BindException이 발생
생략 가능
스프링은 해당 생략시 다음과 같은 규칙을 적용한다.
- String , int , Integer 같은 단순 타입 = @RequestParam
- 나머지 = @ModelAttribute (argument resolver 로 지정해둔 타입 외)
이 뿐만 아니라
@PostMapping("/add")
public String addItemV2(@ModelAttribute("item") Item item) {
itemRepository.save(item);
return "basic/item";
}
상품 등록을 처리할 때 이렇게 받아주면
model.addAttribute("item", item);
위 코드도 자동으로 실행해주는 듯한 효과를 갖는다. (모델에 자동으로 해당 객체를 넣어준다.)
@ModelAttribute("hello") Item item 이름을 hello 로 지정
model.addAttribute("hello", item); 모델에 hello 이름으로 저장
@ModelAttribute 의 이름을 생략하면 모델에 저장될 때 클래스명을 사용한다.
이때 클래스의 첫글자만 소문자로 변 경해서 등록한다. 예) @ModelAttribute
클래스명 모델에 자동 추가되는 이름 Item -> item, HelloWorld -> helloWorld
@ModelAttribute를 생략할 수 있다.
'Spring' 카테고리의 다른 글
[Spring] RedirectAttributes (0) | 2024.05.08 |
---|---|
[Spring] PRG (POST, Redirct, GET) (0) | 2024.05.08 |
[Spring] Thymeleaf(타임리프) 기초 (0) | 2024.05.08 |
[Spring] Spring MVC - 요청 매핑 헨들러 어뎁터 구조 (0) | 2024.05.08 |
[Spring] Spring MVC - HTTP 메시지 컨버터 (0) | 2024.05.08 |