可能重複:
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