1 minute read

1.변환

1.1 WebDataBinder

요청메시지가 들어오면 쿼리스트링(요청메세지의 빨간줄)의 값은 Map으로 담긴다. Controller인 main객체에서 @ModelAttribute Mydate를 매개변수로 가지면 그림과 같이 MyDate 객체가 생성되고 요청 데이터들이 담기게 된다. 데이터가 넘어가는 중간에 WebDataBinder가 데이터의 타입을 변환하고 검증하는 작업을 한다.

Map담긴 데이터의 타입은 String이다 하지만 MyDate에 담긴 데이터의 타입은 Int다. Map에 담긴 데이터가 MyDate에 담기기 위해선 Int 타입으로 변경 해야하는데 스프링에서는 WebDataBinder를 통해 타입 변환을 시킨다. 타입이 변환되면 에러, 결과값을 BindingResult에 저장한다.

MyDate 객체의 month와 day는 범위를 제한한다. 즉 month는 12개로 되어있기 때문에 1부터 12의 값을 가져야하고 day는 31개로 되어있기 때문에 1부터 31의 값을 가져야한다. 이런 조건을 맞춰주기 위해 타입과 마찬가지로WebDataBinder에서 데이터를 검증하는 작업을 해준다. 하지만 검증만 할 뿐이지 데이터를 변화시키지는 않는다.

검증 작업이 완료되면, 에러 및 결과를 BindingResult로 저장하고 Controller에게 저장된 BindingResult를 매개변수로 넘긴다.

2.검증

2.1 Validator

2-2 Validator를 이용한 검증 - 수동

2-3 Validator를 이용한 검증 - 자동

자동으로 검증을 할 때는 @InitBinder가 붙은 메서드에 Validator를 등록하고 @Valid를 이용해서 검증하면 된다. 하지만 등록과 검증은 같은 Controller내에서만 가능하다는 한계가 있다. 이를 해결하기 위해 글로벌 Validator를 사용한다.

2-4 글로벌 Validator

글로벌 Validator는 이름 그대로 모든 영역에 검증을 활용할 수 있는 기능이다. 개별 객체를 검증하는 게 아니라 다수의 객체를 검증하면 글로벌 Validator를 사용한다. servlet-context.xml에 저장 설정한다.

글로벌 Validator와 로컬 Validator는 아래와 같이 동시에 적용할 수 있다.


출처:스프링의 정석 : 남궁성과 끝까지 간다(패스트 캠퍼스 강좌)

Comments