2016-09-14 88 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 { }; 

}