0
我有自定義的約束:JSR-303:添加一個約束衝突後,額外的空單出現在約束違規設置
@Target({FIELD, METHOD})
@Retention(RetentionPolicy.RUNTIME)
@ConstraintComposition(CompositionType.AND)
@Constraint(validatedBy = {CheckNumberValidator.class})
public @interface CheckNumberValid {
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
並驗證它(isValid
法):
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
if(s.length() > 1 && s.length() < 3) {
try {
Integer integer = Integer.valueOf(s);
if(something_wrong) {
constraintValidatorContext.buildConstraintViolationWithTemplate("{tooLargeNum}").addConstraintViolation();
return false;
}
} catch (Exception ex) {
constraintValidatorContext.buildConstraintViolationWithTemplate("{numParseError}").addConstraintViolation();
return false;
}
}
return true;
}
消息是如下:
tooLargeNum="Too large num"
numParseError="Num parse error"
我有一個類與一個字段與註釋。驗證完成後,我得到兩條違反約束的消息:numParseError和空的。
User number = new User("2d");
Set<ConstraintViolation<User>> constraintViolations = validator.validate(number);
for (ConstraintViolation<User> constraintViolation : constraintViolations) {
System.out.println(constraintViolation.getMessage());
}
結果是:
/empty string/
"Num parse error"
這是我在調試看到:
難道我不正確的方式還是什麼加約束衝突是不妥的一般?
是的,這就是我真的錯過。謝謝。 – Dragon