2011-12-06 5 views
7

필드 (String의 경우)에 standart 제약 조건 세트 (길이가 3 ~ 240 자의 null 영숫자 문자열이 아니어야 함)를 넣고 싶은 경우 일부를 재정의 할 수있는 방법이 있는지 알고 싶습니다. 모델 코드에서이 제약 조건의 또한 이것은 오버라이드 될 것인가, 아니면 오버라이드 된 애노테이션을 2 번 유효하게하는 것인가? 당신이JSR 303 맞춤 제한 재정의

확인 답변을

는이

@AlphanumericString 
@Size(min=100, max=150) //override standart values from AlphanumericString annotation 

덕분에 같은 것을해야한다, 나 자신에 응답합니다. 느릅 나무는 중첩 된 주석 매개 변수

@Numerical 
@Size //arbitrary parameter values 
@ConstraintValidator(FrenchZipcodeValidator.class) 
@Documented 
@Target({ANNOTATION_TYPE, METHOD, FIELD}) 
@Retention(RUNTIME) 
public @interface FrenchZipCode { 
    String message() default "Wrong zipcode"; 
    String[] groups() default {}; 

    @OverridesParameters({ 
     @OverridesParameter(constraint=Size.class, parameter="min") 
     @OverridesParameter(constraint=Size.class, parameter="max") }) 
    int size() default 5; 

    @OverridesParameter(constraint=Size.class, parameter="message") 
    String sizeMessage() default "{error.zipcode.size}"; 

    @OverridesParameter(constraint=Numerical.class, parameter="message") 
    String numericalMessage() default "{error.zipcode.numerical}"; 
} 

source

답변

5

그것은 좋은 질문을 다시 할당하는 데 도움이 @OverridesParameter있다. JSR 303 Bean Validation specification은 3.5 절의 유효성 검사 루틴을 설명합니다. 모든 실행, 도달 가능한 모든 필드에 대한

  • : 특정 그룹의 유효성을 검사하려면

    이하는 주어진 빈 인스턴스에 적용되는 유효성 검사 루틴은 특별한 순서없이 다음과 같은 제약 조건을 검증을 수행 할 것으로 예상된다 제공된 유효성 확인 제약 조건이 지정된 탐색 경로 에 대한 유효성 검사 루틴 동안 이미 처리되지 않은 한 대상이 된 그룹과 일치하는 필드 수준 유효성 검사 (수퍼 클래스로 표현 된 유효성 검사 포함)를 수행합니다 (3.5.1 참조). 그룹 일치.

...

개체 유효성 검사 루틴은 다음과 같은 설명되어 있습니다. 각 제약 선언의 경우 :

  • 는 제약 선언에 대한 적절한 ConstraintValidator이 (섹션 3.5.3 참조)을 사용하여 결정합니다. isValid가 true를 돌려주는 경우 isValid에서, 콩 검증 제공자으로 채워은 false를 반환하는 경우
  • 적절한 데이터 (제약 검증 구현에서)를 isValid 작업을 실행, 다음 제약 조건을 계속,
  • 를 (2.4 절 참조) 2.4 절에 정의 된 규칙에 따라 ConstraintViolation 객체를 만들고 이러한 객체를 제약 조건 위반 목록에 추가합니다. 귀하의 경우에는

, 당신은 대상 그룹이 Default입니다 간단한 String 필드의 유효성 검사를 처리합니다. 문서에 따라 특별한 순서없이 개별적으로 유효성을 검사/처리하는 두 가지 유효성 검사 제약 조건 (@AlphanumericString 및 @Size)이 있습니다.

질문에 대답하십시오. 아니요, @Size 추가 사용시 @AlphanumericString에 적용된 우선 적용이 없습니다.나는 당신이하려고 생각 달성 할 수 있으려면, 당신은 overridde 그런 구성 주석에서 속성 제약 구성 만들 수 있습니다 :

@Pattern(regexp="[a-zA-Z]*") 
@Size 
@Constraint(validatedBy = AlphanumericStringValidator.class) 
@Documented 
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) 
@Retention(RUNTIME) 
public @interface AlphanumericString { 
    // ... 
    @OverridesAttribute(constraint=Size.class, name="min") 
    int min() default 3 
    @OverridesAttribute(constraint=Size.class, name="max") 
    int max() default 230;  
    // ... 
} 

을하고 그런 식으로 그것을 사용 :

@AlphanumericString(min = 100, max = 150) 
+0

감사합니다. 이미 알아 냈습니다.이 방법을 사용하려고합니다. 유효성 검사기 팩토리를 응용 프로그램별로 한 번만 인스턴스화하고, 유효성 검사를 그룹으로 나누고 더 느린 처리 ​​시간에서 순서를 지정하는 것 이외에 유효성 검사 속도를 높일 수있는 방법을 제안 할 수 있습니까? – Pilgrim

관련 문제