【问题标题】:Validate a field from form using the BindingResult :Spring使用 BindingResult 验证表单中的字段:Spring
【发布时间】:2018-02-19 14:44:11
【问题描述】:

如何在spring中使用BindingResult验证表单输入中的整数类型值?

当我尝试验证输入时,我遇到了一个异常。我浏览了很多帖子,但没有完全理解这个概念。

这里的问题不在于验证,而在于数据绑定。数据绑定发生在验证之前,只有在所有字段都已正确转换和绑定时才会调用验证。就我而言,绑定步骤失败。如果我在这里错了,请纠正我。

<div class="form-group">
    <div class="col-sm-9">
        <label  th:if="${#fields.hasErrors('age')}" th:errors="age"
                    class="validation-message"></label>
            <input type="number" th:field="*{age}"
            placeholder="Age" class="form-control" /> 
    </div>
</div>

映射请求的代码

@RequestMapping(value = "/registration", method = RequestMethod.POST)
public ModelAndView createNewUser(@Valid User user, BindingResult bindingResult) {
    ModelAndView modelAndView = new ModelAndView();
    User userExists = userService.findUserByEmail(user.getEmail());
    if (userExists != null) {
        bindingResult
                .rejectValue("email", "error.user",
                        "There is already a user registered with the email provided");
    }
    if (bindingResult.hasErrors()) {
        modelAndView.setViewName("registration");
    } else {
        userService.saveUser(user);
        modelAndView.addObject("successMessage", "User has been registered succssfully");
        modelAndView.addObject("user", new User());
        modelAndView.setViewName("registration");
        }
    return modelAndView;
}

用户类

@Column(name = "age")
@NotEmpty(message = "*age is mandatory")
private Integer age;

例外:

javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.Size' validating type 'java.lang.Integer'. Check configuration for 'age'
    at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.throwExceptionForNullValidator(ConstraintTree.java:229) ~[hibernate-validator-5.2.4.Final.jar:5.2.4.Final]
    at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.getConstraintValidatorNoUnwrapping(ConstraintTree.java:310) ~[hibernate-validator-5.2.4.Final.jar:5.2.4.Final]
    at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.getConstraintValidatorInstanceForAutomaticUnwrapping(ConstraintTree.java:244) ~[hibernate-validator-5.2.4.Final.jar:5.2.4.Final]

【问题讨论】:

  • 您可以发布您的用户类的代码吗?您在年龄字段中使用了什么注释?
  • @RSingh 添加了代码。
  • Not empty 用于字符串和集合。如果您只是想确保 Integer 具有某些值,则应使用 javax.validation.constraints.NotNull。

标签: java spring hibernate


【解决方案1】:

非空约束用于字符串和集合。 https://docs.jboss.org/hibernate/beanvalidation/spec/2.0/api/javax/validation/constraints/NotEmpty.html.

要验证 Integer 是否具有某些值,应使用 @NotNull 约束。

【讨论】:

    猜你喜欢
    • 2016-10-28
    • 2014-07-26
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 2019-09-07
    • 2011-01-29
    相关资源
    最近更新 更多