【问题标题】:Spring MVC Validation shows multiple error messagesSpring MVC Validation 显示多条错误消息
【发布时间】:2020-12-20 05:17:45
【问题描述】:

尝试在 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);

它确实执行了验证。但是,如果我没有在联系电话字段中输入任何内容,则会显示两条错误消息。无论如何要修改它,首先它会检查该字段是否为空,如果不是,则继续检查格式,以便每次只显示一个错误消息?

谢谢!

【问题讨论】:

  • 而不是这样做 假设您正在接受请求,使用验证器注释会更容易和干净。 @NotNull(message="")@NotBlank(message="")。您可以将@Pattern 用于正则表达式。让你的请求类扩展一个验证器,然后在执行之前调用它
  • @Silverfang 但是对于这种方法有没有办法做到这一点?

标签: java validation spring-mvc


【解决方案1】:

您可以在Error error 对象上使用getFieldErrorCount 方法来检查contactNumber 字段是否已经存在错误。像这样:

// check integer
if (e.getFieldErrorCount("contactNumber") <= 0 && !p.getContactNumber().matches("[0-9]+")) {
    e.rejectValue("contactNumber", "Format.contactNumber");
}

这是使用最小更改集的最简单修复。您绝对应该查看 @NotNull@Pattern 注释验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-18
    • 2012-04-28
    • 2014-09-23
    • 1970-01-01
    • 2017-03-16
    • 2014-10-17
    • 2017-04-12
    • 1970-01-01
    相关资源
    最近更新 更多