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