数据校验

JSR 303是针对bean数据校验提出的一个规范。使用注解方式实现数据校验。
每个注解的用法这里就不多介绍,请移步JSR 303 - Bean Validation 介绍及最佳实践
主流Bean Validation使用Hibernate的实现,本文使用hibernate-validator
各个版本的规范对应关系如下:

  • JSR 380 (Bean Validation 2.0)
  • JSR 349 (Bean Validation 1.1)
  • JSR 303 (Bean Validation 1.0)

JSR 303伴随着JAVAEE 6在2009年发布,Hibernate实现版本4.3.1.Final,Apache BVal实现版本0.5
JSR349伴随着JAVAEE 7在2013年发布,Hibernate实现版本5.1.1.Final,Apache BVal实现版本1.1.2
JSR380伴随着JAVAEE 8在2017年8月发布,完全兼容低版本的JAVASE,Hibernate实现版本6.0.1.Final,Apache BVal实现版本2.0.3(不太确定)。

通过在JavaBean属性上标注类似@NotNull、@Max等标准的注解指定校验规则,并通过彼岸准验证接口对Bean进行验证。

SpringMVC拥有自己独立的数据校验框架,同时支持JSR303标准的校验框架。Spring在进行数据绑定时,可以同时调用校验框架完成数据校验工作,在SpringMVC中,可直接通过主角驱动的方式进行数据校验。
Spring的LocalValidatorFactoryBean既实现了Spring的Validator接口,也实现了JSR303的Validator接口。只要在Spring容器中定义了一个LocalValidatorFactoryBean,即可将其注入到需要数据校验的Bean中。
Spring本身并没有提供JSR303的实现,所以必须将其实现者的依赖加入。
< mvc:annotation-driven/>会默认装配好一个LocalValidatorFactoryBean,通过在处理方法入参上标注@valid注解即可让SpringMVC在完成数据绑定后进行数据校验工作。
在已经标注了JSR303注解的表单/命名对象前标注一个@Valid,SpringMVC框架在将请求参数绑定到该入参对象后,就会调用校验框架根据注解生命的校验规则实施校验。
SpringMVC是通过对处理方法签名的规约来保存校验结果的,签一个表单/命令对象的校验结果保存到随后的入参中,这个保存校验结果的入参必须是BindingResult或Errors类型,这两个类都位于org.springframework.validation包中。
简而言之:
加入hibernate-validator框架依赖
在SpringMVC配置文件中添加mvc:annotation-driven/
在Bean的属性上添加对应的注解
在目标方法Bean类型前面添加@Valid注解

	@RequestMapping("/testModelAttribute")
	public String testModelAttribute(@Valid User user,BindingResult result) {
		if(result.hasFieldErrors()) {
			for (FieldError error : result.getFieldErrors()) {
				System.out.println(error.getField() + ":" + error.getDefaultMessage());
			}			
		}
		System.out.println("修改User : "+ user);
		return SUCCESS;
	}

特别注意:需要校验的Bean对象和其他绑定结果对象或错误对象是成对出现的,他们之间不允许生成其他的入参。即(@Valid User user,BindingResult result)两个参数之间不允许其他的参数定义。

界面显示可以使用SpringMVC 标签<form:errors path="*"></form:errors>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值