3. 확인(Validation)시스템 구성 단위가 목표한 대로 동작하기 위한 작업으로, 시스템의 모든 계층에 꼭 필요함!하지만… 상당히 귀찮으며중복이 많음개발 편의와 일관성을 위해 다양한 Validation 도구들이 개발됨if( input.getName() == null || input.getAddress() == null || input.getEmail() == null ) { throw new Exception(“invalid input!”);}3
4. JSR 303 Bean Validation도메인 객체를 확인하기 위한 Java 표준 기술애노테이션으로 확인 규칙을 명시<도메인 객체를 이용한 확인 개념도>[1][1] Hibernate Validator Reference Guide4
5. 살짝 둘러보기5<확인 Application- ValidateCar>확인 실패!!doors:must be greater than or equal to 2name:may not be null<도메인 객체 – Car><Console 결과>
22. Constraint Validation 구현체확인 로직을 구현하는 클래스Constraint Annotation의 @Constraint( validatdateBy ) 에 명시함Constraint Annotation 별, 확인 대상 Class 별로 정의해야 함예) @Past 에 대한 Hibernate Validator의구현체는org.hibernate.validator.constraints.impl.PastValidatorForCalendar 와org.hibernate.validator.constraints.impl.PastValidatorForDate10
33. 확인 그룹(Validating Group)상황에 따라 확인 기준이 달라질 경우 어떻게 할까?매번 새로운 도메인 객체를 정의? 상속? 확인 그룹 사용15interface/class 모두 가능확인 실패!!승객수:may not be null
34. Custom ConstraintConstraint를 직접 만들어 쓸 수 있음기본 제공되는 Constraint를 조합별도의 Constraint Validation 구현체가필요 없으며, Constraint Annotation 과 메시지만 정의하면 됨새로운 검증 로직 구현 Constraint Annotation, Constraint Validation 구현체, 메시지를정의함16
40. 메시지 처리 – MessageInterpolator21<META-INF/validation.xml>ValidationMessages2 이라는 이름의ResourceBundle에서 메시지를 가져오도록 정의함메시지 처리 – ResouceBundleValidationMessageResourceBunlde생성22<ValidationMessages_ko.properties><ValidateCar.java - 위반항목 출력 로직>확인 실패!!name:값을 입력해 주세요doors:2 보다 크거나 같아야 합니다.<프로젝트 구조><실행 결과>
41. 실행 환경 구성 – 구현체 선택JSR 303 실행 ImplementationHibernate Validator: JSR 303 참조 구현체(http://www.hibernate.org/subprojects/validator.html)Apache Bean Validation (http://incubator.apache.org/bval/cwiki/index.html)본 자료는 Hibernate Validator 를 기준으로 함23
42. 실행 환경 구성 – 라이브러리 설정Hibernate Validator 를 다운로드 한 다음, 다음의 jar 파일을 프로젝트 classpath에 등록함hibernate-validator-버전.jarlog4j-버전.jarslf4j-*.jarvalidation-api-버전.jar24
44. Spring 3의 JSR 303 지원Spring 3 의 JSR 303 지원 org.springframework.validation.beanvalidationJavax.validation.Validator를 spring.validation.Validator로 활용 가능Constraint Validation Implementation 에 @Autowire등의 DI 가능Spring 의 Locale 적용 가능@Controller 의 parameter 에 @Valid 활용26
47. Validator vs. Validatorjavax.validation.Validator를 spring.validation.Validator로 활용 가능org.springframework.validation.beanvalidation.SpringValidatorAdapter 의 역할Spring 의 Errors 형태로 확인 위반 결과를 활용단, 확인 그룹(Validation Group) 활용은 불가!29동일한 instance!
48. Constraint Validator에 @Autowire사용Custom Constraint Validator 구현체에 @Value, @Autowire를사용 가능org.springframework.validation.beanvalidation.SpringConstraintValidatorFactoryConstraint Validator 가 Service, Property, 기타 스프링 Bean을 손쉽게 활용 가능30
49. Spring MVC 의 @Valid 지원@Controller의 Model 인자에 대한 자동 확인 수행 가능위반 결과는 BindingResult에 저장그러나, 확인 그룹은 적용할 수 없음31javax.validation.Valid
50. Spring MVC 의 @Valid 지원32validator를 설정할 수 있음(org.springframework.validation.Validator)
51. 별도 설정이 필요치 않다면 validator관련 모든 설정을 생략해도 무방!<dispatcher-servlet.xml>
52. 복습 - Spring 3의 JSR 303 지원Spring 3 의 JSR 303 지원 org.springframework.validation.beanvalidationJavax.validation.Validator를 spring.validation.Validator로 활용 가능Constraint Validation Implementation 에 @Autowire등의 DI 가능Spring 의 Locale 적용 가능@Controller 의 parameter 에 @Valid 활용33
53. 더 공부할 내용XML으로 확인 기준 정의하기프로그램 코드로 확인 기준 정의하기더 복잡한 Custom Constraint 정의하기GroupSequence적용하기Payload 활용하기validation.xml 사용하기34
54. 참고자료JSR303 Specification (http://jcp.org/en/jsr/detail?id=303)Hibernate Validator(http://www.hibernate.org/subprojects/validator.html)Spring Reference Chap 5. Validation, Data Binding, and Type Conversion (http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/validation.html)35