반응형
스프링MVC의 핵심개념 중 모델속성에 대해서 알아보자.
- 우선, 우리가 해야할일은 뭘까?
- 바로, @ModelAttribute 어노테이션에 대해서 머리속에 정의를 가지고 있어야한다.
- 그럼, 한번 정의해보자. ModelAttribute 이 어떤 어노테이션인지..
- 간단하게 말씀드리면,
- 스프링 MVC 에서 콘트롤러 웹브라우저가 Domain Model(객체) 로 넘겨주는데,
- 아래 2가지 케이스가 가능하다.
- 첫째, @RequestParam을 사용해서 파라미터를 한개씩 한개씩 받는 방법
- 둘째, @ModelAttribute을 사용해서, 스프링MVC에서 알아서 변환과정을 통해서 Domain Model(객체) 바인딩을 하는 방법
- 아래 2가지 케이스가 가능하다.
- 스프링 MVC 에서 콘트롤러 웹브라우저가 Domain Model(객체) 로 넘겨주는데,
- 간단하게 말씀드리면,
- 즉, 정리하자면, @ModelAttribute을 사용하면, 스프링MVC에서 알아서 변환과정을 통해서 자동으로 Domain Model(객체) 바인딩 시켜주게 됨.
그럼, Binding 수행 시 발생하는 문제가 있을 경우, 어디에 담겨올까?
- 정답
- BindingResult 에 담겨옴.
그럼, 모델속성을 자동으로 바인딩했다고 가정하면, 여기서 또 필요한것이 뭐가 있을까?
- 바로 자동 바인딩 시 각 필드 변수별로 검증작업이 존재하면 좋지 않을까?
- 그럼, 검증작업을 하기위해 스프링이 지원하는 어노테이션은 모가 있을까?
- 정답
- @Valid or @Validated 어노테이션이다.
- 즉, 스프링MVC에서 자동바인딩할때, 각 필드 변수별로 검증작업을 진행할 수 있게 해주는 역할을 한다.
- 예를 들어, 파라미터에 rank 가 있다라고한다면, 해당 어노테이션을 사용해서 정상적인 rank 형태로 넘어왔는지 확인 할 수 있음.
- 단, 유효성을 체크하기 위한 기준은 반드시 필요하다.
- 예를 들어, 파라미터에 rank 가 있다라고한다면, 해당 어노테이션을 사용해서 정상적인 rank 형태로 넘어왔는지 확인 할 수 있음.
- 즉, 스프링MVC에서 자동바인딩할때, 각 필드 변수별로 검증작업을 진행할 수 있게 해주는 역할을 한다.
- @Valid or @Validated 어노테이션이다.
- 정답
그럼, 간단한 예시를 통해서 확인해보자.
- 예시
@RequestParam 사용의 경우
@ModelAttribute 사용의 경우
BindingResult를 통해서 에러를 확인하는 예시
유효성 검증 예시
- pom.xml 아래 의존성 추가
User 클래스
Validator
- 랭킹에 대한 음수값 유효성 체크 예시
- 설명
- Validator는 아래 2가지 메소드를 가지고 있음.
- supports(Class)
- 매개변수로 전달된 클래스를 검증할 수 있는지 여부를 반환
- validate(Object, org.springframework.validation.Errors)
- 매개변수로 전달된 객체를 검증하고 실패하면 Errors 객체에 에러를 등록함.
- supports(Class)
- Validator는 아래 2가지 메소드를 가지고 있음.
- Validator 적용
- Controller 에서..
- 설명
- 첫째, 유효성 검사를 할 커맨드 객체인 User 객체앞에 아래 어노테이션을 추가함.
- @Valid
- 둘째, @InitBinder 어노테이션이 붙은 메소드를 만듬.
- WebDataBinder 는 커맨드 객체를 바인딩하는 객체임.
- 즉, 해당 바인딩한 객체를 setValidator 해줌.
- 위와 같이 코딩을한다면, 실제 검증은 스프링 프레임워크가 initBinder 메소드를 최초에 먼저 호출을 하기때문에 검증단계를 자동으로 수행함.
- 첫째, 유효성 검사를 할 커맨드 객체인 User 객체앞에 아래 어노테이션을 추가함.
결론
- 스프링 MVC 에서 콘트롤러 웹브라우저가 Domain Model(객체) 로 넘겨주는데,
- 아래 2가지 케이스가 가능하다.
- 첫째, @RequestParam을 사용해서 파라미터를 한개씩 한개씩 받는 방법
- 둘째, @ModelAttribute을 사용해서, 스프링MVC에서 알아서 변환과정을 통해서 Domain Model(객체) 바인딩을 하는 방법
- 아래 2가지 케이스가 가능하다.
- 즉, 정리하자면, @ModelAttribute을 사용하면, 스프링MVC에서 알아서 변환과정을 통해서 자동으로 Domain Model(객체) 바인딩 시켜주게 됨.
- 오늘도 스프링MVC의 핵심개념 중 모델속성(ModelAttribute)에 지식 마술(?) 획득완료! 감사합니다. ^^
300x250
'좋아하는 것_매직IT > 1.spring' 카테고리의 다른 글
16.Spring, 스프링MVC의 핵심개념 중 컨트롤러 레벨에서 공통적으로 특정로직을 적용하는 방법에 대해서 알아볼께요. (0) | 2021.01.02 |
---|---|
15.Spring, 스프링MVC의 핵심개념 중 세션속성(SessionAttribute)에 대해서 알아볼께요. (0) | 2021.01.02 |
13.Spring, 스프링MVC의 핵심개념 중 인터셉터(Interceptor)와 핸들러매핑(HandlerMapping)에 대해서 알아볼께요. (0) | 2021.01.02 |
12.Spring, 스프링MVC의 핵심개념 중 뷰(View) 리솔루션 에 대해서 알아볼께요. (0) | 2021.01.02 |
11.Spring, 스프링MVC의 핵심개념 중 RequestMapping 에 대해서 알아볼께요. (0) | 2021.01.02 |