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和类文件中的注释.

猜你喜欢

转载自b-l-east.iteye.com/blog/1705872