我有一个'Answer'对象,它可能是许多类型的答案(电子邮件,电话号码,姓名…)中的一种。我正在编写一个自定义验证器来处理验证,无论答案类型如何,答案文本都存储在单个"值"参数中。
这是我得到的:
注释定义:
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = AnswerValidator.class)
public @interface ValidateAnswerEmail {
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
验证器
public class AnswerValidator implements ConstraintValidator<ValidateAnswerEmail, Answer> {
@Override
public boolean isValid(Answer answer, ConstraintValidatorContext context) {
boolean success = true;
// validation #1
// validation #2
// validation #3
return success;
}
}
我的问题是,如果其中一个失败,我将返回一个额外的验证失败消息。这似乎来自return success
返回false,然后使用注释String message() default "";
作为错误消息。
想知道我是否可以抑制验证违反消息,只返回那些我添加到ConstraintValidatorContext
?
No Spring, Vanilla Java。提前谢谢。
留言如下
Constraint violations:
(1) Kind: PARAMETER
parameter index: 0
message: Email address: some@User@gmail.com is not a valid email address
root bean: org.company.crs.api.AnswerResource@42475403
property path: updateAnswer.arg0
constraint: @org.company.crs.validator.ValidateAnswerEmail(message="", groups={}, payload={})
(2) Kind: PARAMETER
parameter index: 0
message:
root bean: org.company.crs.api.AnswerResource@42475403
property path: updateAnswer.arg0
constraint: @org.company.crs.validator.ValidateAnswerEmail(message="", groups={}, payload={})
您要找的是:context.disableDefaultConstraintViolation();