
WebDataBinder란?
클라이언트가 만약 http://localhost/ch2/getYoilMVC5?year=2021&month=10&day=1 이라고 요청을 보내오면
이 값이 컨트롤러 메서드에게 전달이 된다. 그 값을 받는 매개변수의 데이터 타입이 MyDate이기 때문에 MyDate타입의 객체가 만들어지고 쿼리 스트링으로 전달받은 요청할 때 받은 값들이 객체에 채워져야 한다.
하지만 쿼리스트링은 무조건 문자열로만 취급해서 문자열이지만 MyDate에 선언된 필드들은 모두 int형이다.
그렇기 때문에 쿼리스트링으로 받은 문자열을 MyDate의 필드 타입인 int형으로 형변환이 필요한데 이 중간에서 그 작업을 해주는 것이 WebDataBinder이다.
WebDatBinder의 역할
1️⃣ 타입변환
위의 예제에서와 같이 타입이 일치하지 않을 때 타입 변환을 해주는 역할을 담당한다.
그리고 그 변환 결과 및 에러를 BindingResult라는 곳에 저장한다.
2️⃣ 데이터 검증
변환이 된 이후는 데이터 검증을 한다.
month는 1~12까지 day 1~31까지 만 가능하므로 데이터 검증을 통해 유효한 값만 BindingResult 결과에 저장이 되고 유효하지 않은 값이 있으면 BindingResult에 에러가 저장인 된다.
그 후 WebDataBinder가 저장한 결과 및 에러를 컨트롤러 메서드에게 넘겨줄 수 있다.
그러므로 컨트롤러 메서드에서는 그 작업 결과를 가지고 어떤 처리를 할 수 있게 된다.
3️⃣ 조건
BindingResult는 바인딩할 객체 바로 뒤에 와야 한다.
즉 (@ModelAttribute MyDate date, BindingResult result)와 같이 바인딩할 MyDate라는 객체 바로 뒤 자리해야 한다.
4️⃣ BindingResult의 에러 확인 메서드
BindingResult의 메서드 중 getFiledError() 메서드는 FiledError객체를 반환한다.
이 FiledError객체의 메서드는 아래와 같다.
getCode() : 에러코드를 보여준다.
getField(): 에러가 발생한 코드를 보여준다.
getDefaultMessage() : 자세한 에러 메시지를 보여준다.
Reference
'스프링의 정석 : 남궁성과 끝까지 간다' 수강 후 복습한 내용입니다.
'Spring' 카테고리의 다른 글
| (Spring) Juit4 TDD (0) | 2022.09.25 |
|---|---|
| (Spring)@GetMapping & @PostMapping (0) | 2022.09.04 |
| (Spring)@ModelAttribute (0) | 2022.09.04 |
| (Spring)@RequestParam (0) | 2022.09.04 |
| (Spring)관심사의 분리 및 MVC패턴 (0) | 2022.08.31 |