SpringMVC-10 JSR 303

一、JSR 303

JSR 303 是Java 为Bean 数据合法性校验提供的标准框架,它已经包含在JavaEE 6.0 中.

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


二、Hibernate Validator 扩展注解

Hibernate Validator 是JSR 303 的一个参考实现,除支持所有标准的校验注解外,它还支持以下的扩展注解


三、Spring MVC 数据校验

1、Spring 4.0 拥有自己独立的数据校验框架,同时支持JSR303 标准的校验框架。

  • Spring 在进行数据绑定时,可同时调用校验框架完成数据校验工作。在Spring MVC 中,可直接通过注解驱动的方式进行数据校验
  • Spring 的LocalValidatorFactroyBean 既实现了Spring 的Validator 接口,也实现了JSR 303 的Validator 接口。只要在Spring 容器中定义LocalValidatorFactoryBean,即可将其注入到需要数据校验的Bean 中。

2、Spring 本身并没有提供JSR303 的实现,所以必须将JSR303 的实现者的jar 包放到类路径下。

3、<mvc:annotation-driven/> 会默认装配好一个LocalValidatorFactoryBean

通过在处理方法的入参上标注@valid 注解即可让Spring MVC 在完成数据绑定后执行数据校验的工作

4、在已经标注了JSR303 注解的表单/命令对象前标注一个@Valid,Spring MVC 框架在将请求参数绑定到该入参对象后,

就会调用校验框架根据注解声明的校验规则实施校验

5、Spring MVC 是通过对处理方法签名的规约来保存校验结果的:前一个表单/命令对象的校验结果保存到随后的入参中,这个保存校验结果的入参必须是BindingResult 或Errors 类型,这两个类都位于org.springframework.validation 包中

6、需校验的Bean 对象和其绑定结果对象或错误对象时成对出现的,它们之间不允许声明其他的入参

  • Errors 接口提供了获取错误信息的方法,如getErrorCount() 或getFieldErrors(String field)
  • BindingResult 扩展了Errors 接口

四、在目标方法中获取校验结果

在表单/命令对象类的属性中标注校验注解,在处理方法对应的入参前添加@Valid,Spring MVC 就会实施校验并将校验结果保存在被校验入参对象之后的BindingResult 或Errors 入参中。

• 常用方法:

– FieldError getFieldError(String field)
– List<FieldError> getFieldErrors()
– Object getFieldValue(String field)
– Int getErrorCount()

五、在页面上显示错误

Spring MVC 除了会将表单/命令对象的校验结果保存到对应的BindingResult 或Errors 对象中外,还会将所有校验结果保存到“隐含模型”

•  即使处理方法的签名中没有对应于表单/命令对象的结果入参,校验结果也会保存在“隐含对象” 中。

•  隐含模型中的所有数据最终将通过HttpServletRequest 的属性列表暴露给JSP 视图对象,因此在JSP 中可以获取错误信息

•  在JSP 页面上可通过<form:errors path=“userName”>显示错误消息

六、提示消息的国际化

1、每个属性在数据绑定和数据校验发生错误时,都会生成一个对应的FieldError 对象。

2、当一个属性校验失败后,校验框架会为该属性生成4 个消息代码,这些代码以校验注解类名为前缀,结合modleAttribute、属性名及属性类型名生成多个对应的消息代码:例如User 类中的password 属性标准了一个@Pattern 注解,当该属性值不满足@Pattern 所定义的规则时, 就会产生以下4个错误代码:

– Pattern.user.password
– Pattern.password
– Pattern.java.lang.String
– Pattern

3、当使用Spring MVC 标签显示错误消息时,Spring MVC 会查看WEB 上下文是否装配了对应的国际化消息,如果没有,则显示默认的错误消息,否则使用国际化消息。

4、若数据类型转换或数据格式转换时发生错误,或该有的参数不存在,或调用处理方法时发生错误,都会在隐含模型中创建错误消息。其错误代码前缀说明如下:

– required:必要的参数不存在。如@RequiredParam(“param1”)标注了一个入参,但是该参数不存在

– typeMismatch:在数据绑定时,发生数据类型不匹配的问题

– methodInvocation:Spring MVC 在调用处理方法时发生了错误

5、注册国际化资源文件


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值