我在Spring MVC中尝试执行验证时遇到了一些问题。这是我的验证器类:
@Component
public class LossOfCardValidator implements Validator {
public boolean supports(Class clazz) {
return SingleReplacementForm.class.equals(clazz);
}
public void validate(Object obj, Errors e) {
SingleReplacementForm p = (SingleReplacementForm) obj;
// check empty
ValidationUtils.rejectIfEmpty(e, "contactNumber", "NotNull.contactNumber");
// check integer
if (!p.getContactNumber().matches("[0-9]+")) {
e.rejectValue("contactNumber", "Format.contactNumber");
}
}
在我的控制器中,我使用以下方式调用它:
LossOfCardValidator validator = new LossOfCardValidator ();
validator.validate(singleReplacementForm, bindingResult);
它确实进行了验证。但是,如果我没有为联系人号码字段输入任何内容,则会显示两条错误消息。是否有修改它的方法,首先检查字段是否为空,如果不是,则继续检查格式,以便每次只显示一条错误消息?
谢谢!
您可以在Error error
对象上使用getFieldErrorCount方法来检查contactNumber
字段上是否已经存在错误。像这样:
// check integer
if (e.getFieldErrorCount("contactNumber") <= 0 && !p.getContactNumber().matches("[0-9]+")) {
e.rejectValue("contactNumber", "Format.contactNumber");
}
这是用最小的更改集进行的最简单的修复。您应该明确查看@NotNull
和@Pattern
注释验证。