Ral*_*lph 8 java spring hibernate bean-validation
我有这个复合约束注释(仅用于说明):
@Target... @Retention...
@Constraint(validatedBy = {})
@Pattern(regexp = PasswordComplexity.AT_LEAST_TWO_NONE_ALPAH_CHARS)
@Length(min = 6, max = 20)
public @interface PasswordComplexity {
...
}
Run Code Online (Sandbox Code Playgroud)
我在Spring Controllers和Entity Classes中使用它.
但是现在我需要检查Service方法中的单个String,我需要将相同的约束应用于单个String.由于约束是相同的,我想使用相同的约束定义(@PasswordComplexity)(单一事实来源).就像是:
public void createUser(UserDto userDto, String password) {
if(hasViolation(validator.validate(password,PasswordComplexity.class))) {
throw new PasswordComplexityViolationException();
} else {
…
}
}
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何为没有注释的简单对象(String)运行JSR 303 Validator.它至少是可能的,怎么样?
(我使用Hibernate Validator作为JSR 303提供者)
实现此目的的一种方法是编写一个完整的自定义验证器,并将逻辑下推到该类中,该类的注释仅使用该验证器。这意味着您拥有一个独立的编译单元(一个完整的类PasswordComplexityValidator implements implements ConstraintValidator<PasswordComplexity, String> ...),您可以独立于注释使用它。这种方法还可以让您更轻松地对验证进行单元测试。
但是,由于您使用注释作为配置 Hibernate 提供的现有正则表达式验证器的一种方式,因此您可以使用该注释,将注释类中的常量模式传递给它。您还应该能够将长度约束打包到正则表达式中,这比同时使用两个注释更简单、更快。
| 归档时间: |
|
| 查看次数: |
4521 次 |
| 最近记录: |