2015-01-08 5 views
0

모음에 null 값이 포함되지 않도록하기 위해 Hibernate Validator에서 JSR-303 Bean 유효성 검사를 사용하려고합니다.JSR-303 Bean 유효성 검사 모음 값

나는 다음과 같이 내가 내 컬렉션에 주석을 달 수 있다는 사실을 알고 :

@Valid 
@NotEmpty 
private Set<EmailAddress> emails = new HashSet<>(); 

이 컬렉션 자체가 null 또는 빈 내가 아닌 널 (null)에서 EmailAddress 요소를 추가하는 경우에없는 것을 보장하기위한 작업을 수행 또한이를 올바르게 검증합니다. 그러나 은 null 요소을 추가하는 것을 막지 않습니다.

null 요소가 컬렉션에 추가되지 않도록 할 수있는 방법이 있습니까? 이상적인 세계에서 솔루션은 선언 (나머지 유효성 검사와 마찬가지로)이며 수동으로 null 검사를 수행하는 콜렉션을 프로그래밍 방식으로 반복하지 않아도됩니다.

미리 감사드립니다.

답변

2

Bean 유효성 검사는 설명하는 시나리오에 거의 맞는 컬렉션에 대한 @NotBlank 주석이 없습니다. 기본적으로 언급 한 바와 같이 컬렉션의 내용이 null인지 확인하기 위해 컬렉션의 내용을 프로그래밍 방식으로 검사하는 사용자 정의 유효성 검사기를 구현해야합니다.

public class CollectionNotBlankValidator implements 
    ConstraintValidator<CollectionNotBlank, Collection> { 

    @Override 
    public void initialize(CollectionNotBlank constraintAnnotation) { 

    } 

    @Override 
    public boolean isValid(Collection value, ConstraintValidatorContext context) { 
     Iterator<Object> iter = value.iterator(); 
     while(iter.hasNext()){ 
      Object element = iter.next(); 
      if (element == null) 
       return false; 
     } 
     return true; 
    } 
} 

당신은 내가 사용자 정의 annotaion CollectionNotBlank 명명 한 볼 수 있듯이 : 여기

는 당신이 필요로하는 것이 사용자 정의 유효성 검사기의 예입니다. 다음은 맞춤 특수 효과 코드의 예입니다.

@Target(FIELD) 
@Retention(RUNTIME) 
@Constraint(validatedBy = CollectionNotBlankValidator.class) 
@ReportAsSingleViolation 
@Documented 
public @interface CollectionNotBlank { 

    String message() default "The elements inside the collection cannot be null values."; 

    Class<?>[] groups() default {}; 

    Class<? extends Payload>[] payload() default {}; 
}