2012-02-13 5 views
7

Spring 3 주석 기반 유효성 검사를 사용하고 있습니다. 나는및/또는 Spring 주석 기반 유효성 검사 조건

이 필드를 또는가 아닌 빈 문자열을 포함해야 널이 될 수있는 문자열 필드에 대해 다음 유효성 검사를 추가 할

주석과 같은 @Null, @NotEmpty하지만 난 알고 난에 모두 사용할 수있는 방법 OR 조건?


솔루션 :

@Size(min=1)을하는 데 도움이 사용하지만 공백을 처리하지 않습니다. 따라서 null을 허용하고 비어 있지 않은 문자열도 허용하는 사용자 정의 주석 NotBlankOrNull을 추가합니다. 또한 공백을 처리합니다. @ Ralph. 고마워.
여기

@Documented 
@Constraint(validatedBy = { NotBlankOrNullValidator.class }) 
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) 
@Retention(RUNTIME) 
public @interface NotBlankOrNull { 
    String message() default "{org.hibernate.validator.constraints.NotBlankOrNull.message}"; 

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

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

Validator 클래스 내 주석 나는 또한 내 site에 업데이트 한

public class NotBlankOrNullValidator implements ConstraintValidator<NotBlankOrNull, String> { 

    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) { 
     if (s == null) { 
      return true; 
     } 
     return s.trim().length() > 0; 
    } 

    @Override 
    public void initialize(NotBlankOrNull constraint) { 

    } 
} 

입니다.

답변

5

우선 Spring Annotation 기반 유효성 검사가 아니라 JSR 303 Bean 유효성 검사 (예 : 최대 절전 유효성 검사)로 구현됩니다. 실제로 봄과 관련이 없습니다/

OR 방식으로 주석을 결합 할 수 없습니다 *.

그러나 가장 기본적인 검증은 유효한 입력으로 null을 허용하기 때문에 (즉, 기본 vaidation과 추가 @NotNull을 결합해야하기 때문에 not null 제약 조건에 대한 간단한 해결 방법이 있습니다. 정상적인 "행동이지만 당신이 요구 한 것은 아닙니다).

예 : @javax.validation.constraints.Size 유효한 입력으로 null을 허용합니다.

그럼 케이스에 필요한 것은 @NotEmpty 대신 @Size(min=1)을 사용하는 것입니다.

은 BTW : @NotEmpty는 자기가 그것을 구현 제외 @NotNull@Size(min = 1)

*의 단지 조합 없습니다.

+0

네 개의 제안과 저를 고맙다 고 고맙습니다.'@Size (min = 1)'을 시도했으며'null '및 비어 있지 않은 문자열에 대해 작동합니다. 사용자가 공백을 입력하는 경우 어떻게 대처해야하는지 궁금하십니까? – xyz

+0

@Ajinkya : NotBlank Annotation 소스 코드를 살펴보십시오. 다시 NotNull로 annoteted됩니다. 그러나 그것은 유효하지 않습니다. NotBlankValidator (보통 NotBlankValidator는 null에 대해 true (유효한)을 반환합니다). 따라서 자신 만의 주석이 필요하지만 Validator 구현을 재사용 할 수 있습니다. @Constraint (validBy = {NotBlankValidator.class}) @ Target ... @ Retention ... public @interface NotBlankOrNull' – Ralph

+0

고맙습니다. :) – xyz

관련 문제