2016-09-14 60 views
1

我使用Spring MVC進行表單驗證。用戶實體有登錄字段:如何不重複註釋Bean驗證?

@Pattern(regexp = Constants.LOGIN_PATTERN) 
@Size(min = 4, max = 50) 
private String login; 

但我想利用這個註釋與其他領域,當然,與RegisterData.login。所以我創建了另一個註釋:

@Retention(RetentionPolicy.RUNTIME) 
@Target(value = { ElementType.FIELD, ElementType.PARAMETER }) 
@Pattern(regexp = Constants.LOGIN_PATTERN) 
@Size(min = 4, max = 50) 
public @interface Login { 
} 

現在用它標記字段。但那不行。這是一種使用這種類型的'繼承'?或者我應該重複自己?

+2

這被稱爲* meta-annotation *,它在一般情況下不被支持(一些軟件,如Spring,專門處理它)。如果Groovy是一個選項,您可以使用註釋收集器。 – chrylis

回答

4

通過添加@Constraint註釋,您缺少作爲約束的@Login註釋的聲明。從Bean Validation specification

組成通過使用構成約束註釋註釋約束註釋完成。

由於您的組合約束不需要驗證程序,因此可以將validatedBy屬性設置爲空數組。

@Pattern(regexp = Constants.LOGIN_PATTERN) 
@Size(min = 4, max = 50) 
@Constraint(validatedBy = {}) 
@Target(value = { ElementType.FIELD, ElementType.PARAMETER }) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface Login { 

    String message() default "Incorrect login"; 

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

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

}