【发布时间】: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。