2012-04-30 30 views
6

Tôi có một lớp bean với nhiều ràng buộc bên trong (tùy chỉnh) và một ràng buộc mức lớp. Tôi muốn xác thực các ràng buộc bên trong trước ràng buộc mức lớp. Mã trông giống như sau:Xác thực Bean Java: GroupSequence với Constraint Cấp Lớp

@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 chỉ là một giao diện trống nằm xung quanh một nơi nào đó).

Tuy nhiên, khi tôi cố gắng chạy điều này, ràng buộc mức lớp không được xác thực. Khi tôi cố gắng để xác định GroupSequence như

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

(với Outer là một giao diện ngẫu nhiên), tôi nhận được ngoại lệ:

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

Liệu s/o biết làm thế nào để đảm bảo rằng các lớp cấp ràng buộc được xác nhận sau khi những cái bên trong? (!. Đây không phải dường như là mặc định tôi đã có vấn đề ngẫu nhiên với nó nảy lên sau một thời gian)

Trả lời

10

Hãy thử điều này:

@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; 
} 

Theo spec NewSlotBean chỉ là một stand- cho nhóm mặc định. Xem thêm phần 3.4.3 của thông số Xác thực Bean:

Vì các chuỗi không phụ thuộc vòng tròn, sử dụng mặc định trong việc khai báo chuỗi không phải là một tùy chọn. Hạn chế lưu trữ trên một lớp A và thuộc nhóm mặc định (theo mặc định hoặc rõ ràng) ngầm thuộc nhóm A.

Một chuỗi xác định trên một lớp A (tức là xác định lại các nhóm Mặc định cho lớp) phải chứa nhóm A. Nói cách khác, các ràng buộc mặc định được lưu trữ trên một lớp phải là một phần của định nghĩa chuỗi. Nếu @GroupSequence xác định lại nhóm Mặc định cho lớp A không không chứa nhóm A, GroupDefinitionException được nêu ra khi Quy trình xác nhận và xác nhận ràng buộc lớp được xác thực hoặc khi siêu dữ liệu được yêu cầu.

+0

Chỉ cần một gợi ý cải tiến đến một câu trả lời tuyệt vời: nó có thể tốt hơn để nhóm kiểm chứng thực theo cách khác xung quanh: '@GroupSequence ({NewSlotBean.class, ClassLevel.class}) @TotalBeanValid (nhóm = ClassLevel.class) 'trên lớp' NewSlotBean' và sau đó loại bỏ nhóm xác nhận 'Nhóm nội bộ' và các phép gán nhóm cấp trường - các xác thực trường được gán tự động cho nhóm xác nhận mặc định. Ít mã hơn, sạch hơn. – jannis

Các vấn đề liên quan