结合使用Spring验证器和Hibernate验证器

在本文中,我们将向您展示如何使用Spring验证程序和Hibernate验证程序(bean验证)来验证提交的表单值。

使用的技术:

  1. 春天4.1.6.RELEASE
  2. 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验证器验证。

参考文献

  1. 验证,数据绑定和类型转换
  2. 验证表格输入

翻译自: https://mkyong.com/spring-mvc/combine-spring-validator-and-hibernate-validator/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值