2014-07-22 13 views
9

Szukałem na @org.hibernate.validator.constaints.NotEmpty adnotacji:Co ta zagnieżdżona adnotacja robi/dopuszcza?

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

Jestem zdezorientowany przez ostatnią część:

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

nie jestem pewien, jak to działa, ani w jaki sposób z niego korzystać. Z mojego rozumienia, wszystko pod Java 8 nie pozwala na wielokrotne adnotacje na tym samym elemencie.

Czy ktoś może wyjaśnić?

+0

Jest to podobnie jak zagnieżdżona klasa statyczna lub interfejs zagnieżdżony. Użyj go przez '@ NotEmpty.List'. –

Odpowiedz

8

Powodem, dla którego istnieje NotEmpty.List, jest obejście faktu, że tej samej adnotacji nie można powtórzyć dla tego samego elementu. Przy pomocy NotEmpty.List adnotacje są skutecznie przykładane do jednego elementu. Przetwarzanie adnotacji sprawdza listę adnotacji NotEmpty, które są wartością NotEmpty.List.

W przypadku NotEmpty jednym z powodów używania Listy weryfikatorów może być użycie groups i przypisywanie różnych wiadomości dla każdej grupy.

Dla przykładu, weźmy podmiot, który może reprezentować firmę lub osobę. W obu przypadkach nazwa nie może być pusta, ale wiadomości różnią się:

@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

To musiałoby być @ NotEmpty.List ({...}), nieprawdaż? –