(Spring)@WebDataBinder

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