2012-04-30 1 views
6

여러 개의 (사용자 지정) 내부 제약 조건과 하나의 클래스 수준 제약 조건이있는 Bean 클래스가 있습니다. 클래스 수준 제약 조건 이전에 내부 제약 조건을 확인하고 싶습니다. 코드는 다음과 같습니다Java Bean 유효성 검사 : 클래스 수준 제약 조건이있는 GroupSequence

@GroupSequence({ Inner.class, NewSlotBean.class }) 
@TotalBeanValid(groups = NewSlotBean.class) 
public class NewSlotBean { 

    @DayMonthYearString(groups = Inner.class) 
    private String slotDay; 

    @TimeString(groups = Inner.class) 
    private String slotBegin; 

    @LengthString(groups = Inner.class) 
    private String slotLength; 
} 

(Inner 주위 어딘가에 누워있는 단지 빈 인터페이스입니다).

그러나이 클래스를 실행하려고하면 클래스 수준 제약 조건이 전혀 유효성이 검사되지 않습니다. 나는 (Outer은 임의의 인터페이스 인 상태)

@GroupSequence({ Inner.class, Outer.class }) 

같은 GroupSequence을 정의 할 때, 나는 예외를 얻을 :

javax.validation.GroupDefinitionException: ...*.beans.NewSlotBean must be part of the redefined default group sequence. 

합니까 S/O를 확인하는 방법을 알고 클래스 수준 제약 조건은 내부 제약 조건 다음에 유효합니까? (!. 이것은 내가 잠시 후 터지는 무작위 문제를 했어 기본으로하지 나타납니다)

답변

10

이 시도 :

@GroupSequence({ Inner.class, NewSlotBean.class }) 
@TotalBeanValid(groups = Default.class) 
public class NewSlotBean { 

    @DayMonthYearString(groups = Inner.class) 
    private String slotDay; 

    @TimeString(groups = Inner.class) 
    private String slotBegin; 

    @LengthString(groups = Inner.class) 
    private String slotLength; 
} 

을 사양에 따라 NewSlotBean 그냥 스탠드입니다 기본 그룹의 경우 빈이 검증 스펙의 섹션도 3.4.3 참조 : 시퀀스 에서 기본값을 사용하여 순환 종속성을 가질 수 없습니다

때문에 시퀀스의 선언이 옵션을 선택하지 않습니다. 제약 조건은 암시 적으로 그룹 A에 속하는 클래스 A 에서 호스팅하고 (기본값으로 또는 명시 적으로 에 의해) 기본 그룹에 속하는

(즉,이 클래스의 기본 그룹을 를 재정의)는 클래스 A에 정의 된 순서를해야합니다 즉, 그룹에 포함 된 기본 제약 조건은 시퀀스 정의의 일부 여야합니다. 클래스 A의 Default 그룹을 다시 정의하는 @GroupSequence가 그룹 A를 포함하지 않으면 제한 선언 및 유효성 검사 프로세스가 클래스 의 유효성을 검사하거나 메타 데이터를 요청할 때 GroupDefinitionException이 발생합니다.

+0

훌륭한 대답 그냥 개선 제안 : '@GroupSequence ({NewSlotBean.class, ClassLevel.class}) @TotalBeanValid (그룹 = ClassLevel.class)가 검증 다른 방법으로 주위 그룹에 아마 더 낫다 ''NewSlotBean' 클래스에서 'InnerGroup' 검증 그룹과 필드 레벨 그룹 할당을 제거하면 필드 유효성 검사가 자동으로 기본 유효성 그룹에 지정됩니다. 적은 코드, 더 깨끗한. – jannis