可能重复:
using Hibernate Validator without calling annotation.编程Bean验证(JSR 303)无注释
我有(仅用于说明)这种复合约束注释:
@Target... @Retention...
@Constraint(validatedBy = {})
@Pattern(regexp = PasswordComplexity.AT_LEAST_TWO_NONE_ALPAH_CHARS)
@Length(min = 6, max = 20)
public @interface PasswordComplexity {
...
}
而且我在Spring控制器和实体类中使用它。
但现在我需要检查一个服务方法中的单个字符串,我需要将相同的约束应用于单个字符串。由于约束条件相同,我想使用约束的相同定义(@PasswordComplexity)(单一来源)。喜欢的东西:
public void createUser(UserDto userDto, String password) {
if(hasViolation(validator.validate(password,PasswordComplexity.class))) {
throw new PasswordComplexityViolationException();
} else {
…
}
}
但我不知道该怎么办好了JSR 303验证一个没有注释的简单对象(字符串)。至少有可能,以及如何?
(我使用Hibernate验证作为JSR 303提供)
我明白'单一来源的真相',你的意思是不必重复你的注释,它可能放在'UserDto'类的'password'属性/字段中,对吧?但在你的“类似”例子中,你至少要重复注释的名称('PasswordComplexity')。这不是冗余吗? – 2011-06-10 09:08:38
@Grzegorz Oledzki:没问题的是不要在不同的地方使用注释。对于“单一真相源”,我的意思是我想使用注释,而不是在别处写同样的东西(长度和模式)定义。 – Ralph 2011-06-10 09:56:35
@abalogh:问题是重复的(我把它覆盖了),但接受的答案与问题不符 - 或者至少不是我的问题。 – Ralph 2011-06-10 10:10:19