3.7.2 by sh
3.7.2. Bean Validation Provider 구성
스프링은 Bean Validation API를 완벽하게 지원합니다. 여기에는 JSR-303 또는 JSR-349 Bean Validation Provider를 스프링 빈으로서 부트스트랩 하기 위한 편리한 지원이 포함됩니다. 이를 통해 응용 프로그램에서 유효성 검사가 필요한 어느 곳에서든지 javax.validation.ValidatorFactory
또는 javax.validation.Validator
를 주입할 수 있습니다.
다음 예제와 같이 LocalValidatorFactoryBean
을 사용하여 기본 Validator를 스프링 빈으로 구성할 수 있습니다.
앞의 예제의 기본 구성은 기본 부트스트랩 메커니즘을 사용하여 초기화하기 위해 빈 유효성 검사를 트리거 합니다. Hibernate Validator와 같은 JSR-303 또는 JSR-349 Provider는 클래스 패스에 있을 것으로 예상되며 자동으로 감지됩니다.
Validator 주입
LocalValidatorFactoryBean
은 스프링의 org.springframework.validation.Validator
뿐만 아니라 javax.validation.ValidatorFactory
와 javax.validation.Validator
를 모두 구현합니다. 이러한 인터페이스 중 하나에 대한 참조를 Validation 로직을 호출해야하는 빈에 삽입할 수 있습니다.
LocalValidatorFactoryBean
스프링에서 제공하는 검증 클래스. Javax.validatoin.Validator 인터페이스와 org.springframework.validation.Validator 인터페이스를 구현했으므로 필요한 곳에서 적당한 인터페이스 타입으로 참조해서 사용하면 된다.
다음 예제와 같이 Bean Validation API를 직접 사용하려는 경우 javax.validation.Validator
에 대한 참조를 삽입할 수 있습니다.
다음 예제와 같이 빈이 스프링 Validation API를 필요로 한다면 org.springframework.validation.Validator
에 대한 참조를 삽입할 수 있습니다.
org.springframework.validation.Validator 인터페이스 (아래 메서드 구현해야 함)
boolean supports(Class class) : 주어진 객체(class)에 대해 Validator가 지원 가능한가?
void validate(Object target, Errors errors) : 주어진 객체(target)에 대해서 유효성 체크를 수행하고, 유효성 에러 발생 시 주어진 Errors 객체에 관련 정보가 저장된다.
사용자 정의 제약 조건 구성
각 빈 유효성 검증 제약 조건은 다음의 두 부분으로 구성됩니다. “제약 조건 및 구성 가능한 속성들을 선언하는 @Constraint
어노테이션”. “제약 조건의 동작을 구현하는 javax.validation.ConstraintValidator
인터페이스의 구현”.
선언과 구현을 연결하기 위해 각 @Constraint
어노테이션은 해당하는 ConstraintValidator
구현 클래스를 참조합니다. 런타임 시 ConstraintValidatorFactory
는 도메인 모델에서 Constraint 어노테이션이 발생할 때 참조된 구현을 인스턴스 화합니다.
@Constraint
만들고자 하는 Annotation이 어떤 검증 클래스를 이용해서 검증 작업을 하는 지 지정.
Ex. @Constraint(validatedBy={ExcistCheckValidator.class})
ExistCheckValidator 클래스가 ConstraintValidator 인터페이스를 구현한 클래스로, 검증 작업을 하게 될 클래스임.
ConstraintValidator 인터페이스 구현한 클래스의 기본 구조
initialize() : 이 클래스가 객체로 만들어질 때의 초기화 작업 수행. 파라미터에 이 클래스가 이용되는 어노테이션을 설정. 즉, 어노테이션에서 관련 정보를 읽어 초기화 작업을 하는 것.
valid() : T로 정의한 클래스 객체의 값을 읽어 검증 작업 수행. 이 함수가 true 리턴 시 검증 작업을 성공적으로 마친 것. false 리턴 시 검증에 문제가 생겼음을 의미.
기본적으로 LocalValidatorFactoryBean
은 스프링을 사용하여 ConstraintValidator
인스턴스를 생성하는 SpringConstraintValidatorFactory
를 구성합니다. 이를 통해 사용자 정의 ConstraintValidators
는 다른 스프링 빈처럼 의존성 주입의 이점을 얻을 수 있습니다.
다음 예제는 의존성 주입을 위해 스프링을 사용하는 관련 ConstraintValidator
구현이 따르는 사용자 정의 @Constraint
선언을 보여줍니다.
앞의 예제에서 볼 수 있듯이, ConstraintValidator
구현은 다른 스프링 빈과 마찬가지로 @Autowired
를 가질 수 있습니다.
스프링 기반 메소드 유효성 검사
다음과 같이 Bean Validation 1.1에서 지원되는 메소드 유효성 검사 기능(그리고 사용자 정의 확장 기능, 또한 Hibernate Validator 4.3에 의해)을 MethodValidationPostProcessor
빈 정의를 통해 스프링 컨텍스트에 통합할 수 있습니다.
스프링 기반 메소드 유효성 검사를 받기 위해서는 모든 대상 클래스에 스프링의 @Validated
어노테이션을 추가해야 합니다. Hibernate Validator와 Bean Validation 1.1 Provider의 설치에 대한 자세한 정보는 MethodValidationPostProcessor
javadoc를 참고하십시오. (옵션으로, 사용할 Validation 그룹을 선언할 수도 있습니다)
@Configuration 클래스에 MethodValidationPostProcessor 추가. (@Bean)
@Validated를 컨트롤러 클래스에 추가.
@RequestParam 바로 앞에 @Size를 사용
추가 구성 옵션
대부분의 경우에는 기본 LocalValidatorFactoryBean
구성으로 충분합니다. 메시지 보간에서 순회 해석에 이르기까지 다양한 빈 유효성 검증 구조에 대한 여러 가지 구성 옵션이 있습니다. 이러한 옵션에 대한 자세한 내용은 LocalValidatorFactoryBean
javadoc javadoc을 참조하십시오.
Last updated
Was this helpful?