2014-07-22 12 views
9

tôi đang tìm kiếm tại @org.hibernate.validator.constaints.NotEmpty chú thích:Chú thích lồng nhau này làm gì/cho phép?

@Documented 
@Constraint(validatedBy = { }) 
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) 
@Retention(RUNTIME) 
@ReportAsSingleViolation 
@NotNull 
@Size(min = 1) 
public @interface NotEmpty { 
    String message() default "{org.hibernate.validator.constraints.NotEmpty.message}"; 

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

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

    /** 
    * Defines several {@code @NotEmpty} annotations on the same element. 
    */ 
    @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) 
    @Retention(RUNTIME) 
    @Documented 
    public @interface List { 
     NotEmpty[] value(); 
    } 
} 

Tôi đang bối rối bởi phần cuối cùng:

/** 
    * Defines several {@code @NotEmpty} annotations on the same element. 
    */ 
    @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) 
    @Retention(RUNTIME) 
    @Documented 
    public @interface List { 
     NotEmpty[] value(); 
    } 

Tôi không chắc chắn làm thế nào mà làm việc, cũng không phải làm thế nào để sử dụng nó. Từ sự hiểu biết của tôi, bất cứ điều gì dưới Java 8 không cho phép lặp lại các chú thích trên cùng một phần tử.

Ai có thể làm rõ?

+0

Nó giống như một lớp tĩnh lồng nhau hoặc giao diện lồng nhau. Sử dụng nó bằng '@ NotEmpty.List'. –

Trả lời

8

Lý do tại sao NotEmpty.List tồn tại, là thực tế là không thể lặp lại cùng một chú thích cho cùng một phần tử. Với sự giúp đỡ của NotEmpty.List nhiều NotEmpty chú thích được áp dụng hiệu quả cho một phần tử. Xử lý chú thích kiểm tra thông qua danh sách chú thích NotEmpty là giá trị của NotEmpty.List.

Trong trường hợp NotEmpty, một lý do để sử dụng Danh sách người xác thực có thể sử dụng groups và chỉ định các thông báo khác nhau cho mỗi nhóm.

Vì mục đích ví dụ, hãy lấy thực thể có thể đại diện cho công ty hoặc người. Trong cả hai trường hợp, tên không được rỗng, nhưng các thông báo khác nhau:

@NotEmpty.List({ 
    @NotEmpty(message = "Person name should not be empty", 
       groups=PersonValidations.class), 
    @NotEmpty(message = "Company name should not be empty",  
       groups=CompanyValidations.class), 
}) 
private String name; 
+0

Đó sẽ phải là @ NotEmpty.List ({...}) phải không? –

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