可能是重复问题:
不调用注释使用Hibernate验证器。
我有这个组合约束注释(仅供说明):
@Target... @Retention...
@Constraint(validatedBy = {})
@Pattern(regexp = PasswordComplexity.AT_LEAST_TWO_NONE_ALPAH_CHARS)
@Length(min = 6, max = 20)
public @interface PasswordComplexity {
...
}
我在Spring Controllers和Entity Classes中使用它。
但是现在我需要在Service方法中检查单个字符串,在这里我需要将相同的约束应用于一个单个字符串。由于约束是相同的,我想使用相同的约束定义(@PasswordComplexity)(唯一真理来源)。类似于:
public void createUser(UserDto userDto, String password) {
if(hasViolation(validator.validate(password,PasswordComplexity.class))) {
throw new PasswordComplexityViolationException();
} else {
…
}
}
但我不知道如何为未注释的简单对象(String)运行JSR 303验证器。这是否至少是可能的,如何实现?
(我使用Hibernate Validator作为JSR 303提供者)
UserDto
类中的password
属性/字段上方放置的注释,对吗?但是在你的“类似于”的示例中,至少重复了注释的名称(PasswordComplexity
)。这也不是多余吗? - Grzegorz Oledzki