2012-08-02 3 views
3

특정 제한 그룹 (기본값이 아님)에 대한 사용자 정의 유효성 검사기를 작성하고 있지만 런타임에서 다음과 같은 오류가 발생합니다.JSR303 사용자 정의 주석의 제한 그룹이 빈 배열로 기본 설정되어야하는 이유는 무엇입니까?

왜 나는 기본값이 비어 있어야하는지 궁금합니다. 의견을 공유 할 수 있다면 감사하게 생각하십시오. 감사합니다 :)

xxx.model.validation.CustomValidation에는 Constraint annotation이 들어 있지만 groups 매개 변수의 기본값은 빈 배열이 아닙니다.

스택 트레이스 : org.hibernate.validator.metadata.ConstraintHelper.assertGroupsParameterExists (ConstraintHelper.java:335) org.hibernate.validator.metadata.ConstraintHelper.isConstraintAnnotation (ConstraintHelper.java:282)

답변

2

내가 할 수있는 ' 어느 시나리오에서 특정 그룹에 제약 조건을 바인딩하는 것이 유용 할 수 있는지 파악하십시오.

그룹은 부분 유효성 검사 (및 시퀀스 유효성 검사)에 사용됩니다. 한 클래스에 10 개의 필드가있는 경우 해당 필드 중 8 개를 A 및 2를 B으로 표시 할 수 있습니다. 그런 다음 A 그룹 또는 B 그룹의 필드 만 유효성을 검사하도록 결정할 수 있습니다. 반대로 @MyConstraint이 (가) 이라는 특정 그룹에 속하기를 원합니다. 그것은 말도 안돼. 그룹은 동일 클래스의 다른 필드와 일부 필드를 구별하는 데 사용되는 이름입니다. 절대적인 의미는 없습니다. 그룹은 제약 조건 정의가 아닌 유효성 검사에 유용하며 제약 조건이 아닌 필드와 관련이 있습니다.

제약 조건 정의에서 그룹 이름을 숨기면 필드의 유효성이 모두 검증 된 것으로 생각할 수 있으므로 오류가 발생할 수 있습니다.

@Email 
private String mail; 

@Password 
private String pass; 

@VAT 
private String vatCode; 

부분 확인이 가능한지 확인할 수 있습니까?

편집 두 번째 주석과 관련

: 당신은 전혀 제약 조건 5 개 필드가있는 클래스가 있다고 가정 . 그 중 세 개는 정수입니다. 이 세 필드의 합계를 확인하려면 제안한대로 클래스 수준의 제약 조건을 만들어야합니다. 이 방법으로 사용자 정의 주석이 필드가 아닌 클래스에 적용되므로 필드에서 그룹을 어떻게 정의 할 수 있습니까?

@Sum(min = 250, fields = {"length", "width", "height"}) 
public class MyClass { 
    private String type; 
    private String code; 
    private int length; 
    private int width; 
    private int height; 
     ... 
} 
+0

감사 알프 :

대신, 다음과 같이 사용할 수 있습니다. 마지막 점 ** "제약 조건 정의에서 그룹 이름을 숨기면 오류가 발생할 수 있습니다"**는 유효합니다. @VAT가 Default 그룹과 다른 기본 그룹이있는 사용자 정의 제약 인 경우 혼동 및 오류가 발생할 수 있으므로 실제로 구분할 수 없습니다. –

+0

첫 번째 요점을 이해하지 못합니다. 그룹 A, B가 다른 유효성 검사 규칙 집합을 나타내는 필드가 있습니다. 그러나 그룹 B의 경우 여러 필드에서 수행해야하는 맞춤 검증이 있습니다 (예 : 합계가 최소보다 커야 함). 따라서 모델 자체에 맞춤 검증기/제약 조건 (예 : Target : ElementType.TYPE)을 작성했습니다. 이 사용자 지정 유효성 검사기는 B 그룹에 대해서만 의미가 있으므로 B를 기본 제약 그룹으로 지정하려고했습니다. –

+0

@ TheHuy, 내 편집 참조 – Alf