SpringMVC数据转换
SpringMVC荣国反射机制对目标处理方法的签名进行分析,并将请求消息绑定到处理方法的参数中。大致流程如下图
SpringMVC框架将ServletRequest对象及处理方法的参数对象实例传递给DateBinder,DateBinder调用装配在Spring Web上下文中的ConversionService组件进行数据类型转换、数据格式化工作,并将ServletRequest中的消息填充到参数对象中。然后在调用Validator组件对已经绑定了请求消息数据的参数对象进行数据合法性校验,并最终生成数据绑定加多BindingResult对象。BindingResult包含了已完成数据绑定的参数对象,还包含响应的校验错误对象,SpringMVC抽取BindingResult中的参数对象及校验错误对象,将它们赋给处理方法的响应参数。
Spring MVC 上下文中内建了很多转换器,可完成大多数 Java 类型的转换工作。
自定义类型转换器
ConversionService 是 Spring 类型转换体系的核心接口。
可以利用 ConversionServiceFactoryBean 在 Spring 的 IOC 容器中定义一个 ConversionService. Spring 将自动识别出IOC 容器中的 ConversionService,并在 Bean 属性配置及
Spring MVC 处理方法入参绑定等场合使用它进行数据的转换
可通过 ConversionServiceFactoryBean 的 converters 属性注册自定义的类型转换器
<mvc:annotation-driven conversion-service=“conversionService”/> 会将自定义的 ConversionService 注册到Spring MVC 的上下文中
<!-- 装配自定义的类型转换器 -->
<mvc:annotation-driven conversion-service="conversionService"/>
<!-- 自定义的类型转换器 -->
<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="org.fkit.converter.StringToDateConverter" p:datePattern="yyyy-MM-dd"></bean>
</list>
</property>
</bean>
关于 mvc:annotation-driven
<mvc:annotation-driven /> 会自动注册 RequestMappingHandlerMapping、RequestMappingHandlerAdapter 与ExceptionHandlerExceptionResolver 三个bean。
还将提供以下支持:
支持使用 ConversionService 实例对表单参数进行类型转换
支持使用 @NumberFormat annotation、@DateTimeFormat 注解完成数据类型的格式化
支持使用 @Valid 注解对 JavaBean 实例进行 JSR 303 验证
支持使用 @RequestBody 和 @ResponseBody 注解
一共有三种基本方法来进行数据转换
1、 使用ConversionService转换数据
2、 使用@InitBinder添加自定义编辑器转换数据
3、 使用WebBindingInitializer注册全局自定义编辑器转换数据
倘若您三种同时使用,顺序是这样的:
1、 使用ConversionService转换数据
2、 使用@InitBinder添加自定义编辑器转换数据
3、 使用WebBindingInitializer注册全局自定义编辑器转换数据