`
b_l_east
  • 浏览: 636631 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SpringMVC之DataBinding和Validation--Validator,PropertyEditor,Converter,Formatter

 
阅读更多

近来学习SpringMVC中,对DataBinding和Validation这一块比较迷惑,特地总结了一下:

 

 

validator: 数据校验,

分两种一种是Spring自己提供的Validator接口和JSR303标准的注解式校验

 

注册方式:

1. 在@InitBinder方法中局部注册

2. 自定义JSR303注解

调用方式:

1. 对于已注册或注解方式, 在参数前加@Valid标识调用 (注意只能用在表单提交的model上)

2. 对于Validator接口可以手工编写代码调用

对于使用了Hibernate时,Hibernate会自动调用JSR303标准验证。

 

PropertyEditor(1), Converter(2)/HttpMessageConverter(3), Formatter(4):

全部用于数据类型的转换.

 

(1)是JDK自带的, 其它的都是Spring提供接口.

 

(1)(4)用于String和所需类型之间的转换;(2)可以是任意类型间的转换,包括了String与其它类型的转换;(3)用于把HttpMessage(包括HttpRequest和HttpResponse)中的内容与所需类型之间的转换.

 

它们都可以由Spring自动调用(在需要类型转换的时候), (4)还可提供注解形式,用注解指明调用.

 

遇到类型转换时, 它们的调用顺序如下(后者只有在前者未找到时执行):

1. 使用@InitBinder注册的PropertyEditor (只在局部注册,优先使用)

2. Formatter, Formatter加入了Locale信息, 所以会优先使用, 如果使用了注解形式, 优先使用注解

3. Converter

4. 全局的PropertyEditor (注意Spring未使用PropertyEditorManager, 只支持在Model的同包下查找ModelEditor)

注意: HttpMessageConverter主要用于HttpMessage跟对象的转换,只有在使用@RequestBody, HttpEntity<T>, @ResponseBody实会用到。

 

注册方式:

PropertyEditor:

1. 在@InitBinder方法中注册(局部)

2. 把它放在model包中,名字为model类名+Editor, 如User-->UserEditor且在同一包中(全局)

 

Formatter:

1. 在FormattingConversionServiceFactoryBean-->formatters中注册

2. 使用实现注解的方式

 

Converter

1. 在FormattingConversionServiceFactoryBean-->converters中注册

 

HttpMessageConverter

1. 在<mvc:annotation-driven>--><mvc:message-converters>中注册

 

 

详情请参考示例工程, 请阅读源码包中的readme.txt文件(有多个), 测试是无法一次测试的, 因为上面说的查找顺序的关系所以需要注释一些代码才能测其它的, 主要还是看readme.txt和类文件中的注释.

分享到:
评论
1 楼 dxqrr 2015-01-12  
总结的不错

相关推荐

Global site tag (gtag.js) - Google Analytics