1. 转换器接口
Spring定义3种类型的转换器接口,实现任意一个转换器接口都可以作为自定义转换器注册到 ConversionServiceFactoryBean 中
- Converter<S,T>:将 S 类型对象转为 T 类型对象
- ConverterFactory:将相同系列多个 “同质” Converter 封装在一起。如果希望将一种类型的对象转换为另一种类型及其子类的对象(例如将 String 转换为 Number 及 Number 子类(Integer、Long、Double等)对象)可使用该转换器工厂类
- GenericConverter:会根据源类对象及目标类对象所在的宿主类中的上下文信息进行类型转换
2. InitBinder注解
由@InitBinder标识的方法,可以对WebDataBinder 对象进行初始化。WebDataBinder 是 DataBinder 的子类,用于完成由表单字段到 JavaBean 属性的绑定
lastName的字段不进行数据绑定,另作处理
@InitBinder
public void initBinder(WebDataBinder dataBinder){
dataBinder.setDisallowedFields("lastName");
}
3. 数据的格式化
Spring 在格式化模块中定义了一个实现 ConversionService 接口的
FormattingConversionService实现类,该实现类扩展了 GenericConversionService
因此它既具有类型转换的功能,又具有格式化的功能
拥有一个 FormattingConversionServiceFactroyBean 工厂类,后者用Spring 上下文中构造前者,FormattingConversionServiceFactroyBean 内部已经注册了
NumberFormatAnnotationFormatterFactroy:支持对数字类型的属性使用
@NumberFormat注解
JodaDateTimeFormatAnnotationFormatterFactroy:支持对日期类型的属性使用
@DateTimeFormat 注解
装配了 FormattingConversionServiceFactroyBean 后,就可以在 Spring MVC 入参绑定及模型数据输出时使用注解驱动了。