如何不重复Bean验证的注释?

Fee*_*eco 3 java bean-validation

我使用Spring MVC进行表单验证.用户实体具有字段登录:

@Pattern(regexp = Constants.LOGIN_PATTERN)
@Size(min = 4, max = 50)
private String login;
Run Code Online (Sandbox Code Playgroud)

但我希望将这个注释用于其他字段,例如,使用RegisterData.login.所以我创建了另一个注释:

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

现在用它标记字段.但这不起作用.它是一种使用这种"继承"的方式吗?或者我应该重复一遍?

Tun*_*aki 6

@Login通过添加@Constraint注释,您将缺少注释声明作为约束.从Bean Validation规范:

通过使用组合约束注释来注释约束注释来完成组合.

由于组合约束不需要验证器,因此可以将该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 { };

}
Run Code Online (Sandbox Code Playgroud)