在本文中,我们将向您展示如何使用Spring验证程序和Hibernate验证程序(bean验证)来验证提交的表单值。
使用的技术:
- 春天4.1.6.RELEASE
- Hibernate Validator 5.1.3.Final
1.休眠验证器
如果提供@Valid
则将触发Hibernate验证器。
import org.hibernate.validator.constraints.NotEmpty;
public class User {
@NotEmpty
String name;
//...
}
@RequestMapping(value = "/users", method = RequestMethod.POST)
public String saveOrUpdateUser(
@ModelAttribute("userForm") @Valid User user,
BindingResult result, Model model) {
if (result.hasErrors()) {
//...
} else {
//...
}
}
2. Spring验证器
如果您通过@InitBinder
启用了Spring验证器,则Hibernate bean验证将被忽略。
public class UserFormValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return User.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
User user = (User) target;
//validate something else
}
}
@Controller
public class UserController {
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(new UserFormValidator());
}
3. Hibernate Validator + Spring Validator
同时具有Hibernate和Spring验证器。 删除@InitBinder
并手动触发Spring验证器。
@Controller
public class UserController {
/*@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(new UserFormValidator());
}*/
@RequestMapping(value = "/users", method = RequestMethod.POST)
public String saveOrUpdateUser(
@ModelAttribute("userForm") @Valid User user,
BindingResult result, Model model) {
//run Spring validator manually
new UserFormValidator().validate(user, result);
if (result.hasErrors()) {
//...
} else {
//...
}
}
在上面的示例中,提交的“ userForm”模型将首先由Hibernate验证器验证,然后由Spring验证器验证。
参考文献
翻译自: https://mkyong.com/spring-mvc/combine-spring-validator-and-hibernate-validator/