@ModelAttribute
적용 대상을 모델의 속성으로 자동 추가해주는 애너테이션
반환타입 또는 컨트롤러 메서드의 매개변수에 적용 가능
key-value형태로 저장
1. key를 직접 지정하지 않으면?
→ 타입의 첫글자가 소문자인것으로 스프링내에서 알아서 지정한다
(@ModelAttribute Mydate myDate, Model model) → model.addAttribute("myDate", myDate) : 같은 의미
2. 반환타입에 붙이면?
→ 해당 이름으로 모델에 자동으로 객체 추가, 호출결과 저장 후 별도의 모델 호출 없이도 뷰에서 객체 사용 가능
→ @ModelAttribute를 사용하면 model.addAttribute("myDate",myDate); 이렇게 할 필요 없다
참조형 매개변수에는 생략가능(자동 바인딩)
컨트롤러 매개변수에 따라서
- @RequestParam(기본형,String) → 기본형 : ${param.파라미터명}으로 직접 사용가능, 모델에 저장할 필요 X
- @ModelAttribute(타입이 참조형) → 스프링 내부의 Converter를 통해서 변환되어 바인딩 됨
@WebDataBinder
컨트롤러 메서드 선언 돼있을때 순서
1. 타입 변환(타입이 일치하지 않을때) : 결과&에러 저장
2. 데이터검증 : 결과와 에러를 가지고 검증
검증한 결과와 에러를 다시 저장 → 컨트롤러로 반환
※ 바인딩할 데이터는 반드시 매개변수의 바로 뒤에 위치하여야 한다.