基于佟刚老师视频教程的Spring MVC数据类型转换学习总结

基于Spring MVC数据类型转换的学习笔记总结

问题
页面中数据格式为字符串格式,后台pojo中对应的类型可能为另外一种对象。
如: 在前台页面输入一个固定格式的时间字符串,在后台接收为一个java.util.Date类型的对象。

1. 实现Converter接口

创建自己的Converter(EmployeeConverter),实现org.springframework.core.convert.converter.Converter<S, T>接口。
S表示源对象类型:String
T表示目标对象类型: Employee

2. 添加到SpringMVC的配置文件

配置ConversionService:	
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

<!-- conversionService必须要注入到<mvc:annotation-driven>中 -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
	<property name="converters">
		<set>
			<!-- 就是1中自己实现的converter对象 -->
			<ref bean="employeeConverter" />
		</set>
	</property>
</bean>

3. 数据校验
可以在自己实现的converter中实现数据校验的功能

数据绑定流程

  1. Spring MVC主框架将ServletRequest对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象。
  2. DataBinder 调用装配在Spring MVC上下文中的 ConversionService 组件进行数据类型转换、数据格式化工作。将Servlet中的请求信息填充到入参对象中。
  3. 调用 Validator 组件对已经绑定了请求消息的入参对象进行数据合法性校验,并最终生成数据绑定结果 BindingData 对象。
  4. Spring MVC抽取 BindingResult 中的入参对象和校验错误对象,将它们付给处理方法的相应入参。

SpringMVC通过反射机制对目标处理方法进行解析,将请求消息绑定到处理方法的入参中。数据绑定的核心部件是DataBinder

Spring MVC上下文中内建了很多转换器,可完成大多数java类型的转换工作。一般类型的转换不需要进行特殊的配置。

自定义类型转换器总结

  1. ConversionService 是 Spring 类型转换体系的核心接口。
  2. 可以利用ConversionServiceFactoryBean在 Spring 的IOC容器中定义一个ConversionService。 Spring将自动识别出IOC容器中的 ConversionService, 并在Bean属性配置及Spring MVC处理方法入参绑定等场合使用它进行数据的转换。
  3. 可通过ConversionServiceFactoryBean的converters属性注册自定义的类型转换器。
  4. 代码示例
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
	<property name="converters">
		<list>
			<bean class="cyz.converter.UserConverter"></bean>
		</list>
	</property>
</bean>
  1. 如何定义一个类型转换器
    Spring 支持三种类型转换器,实现任意一个转换器接口都可以作为自定义转换器注册到ConversionServiceFactoryBean中:


    5.1. Converter<S,T>: 将S类型对象转换为T类型对象

    5.2. ConverterFactory: 将相同系类多个“同质”Converter封装在一起。如果希望将同一种类型的对象转换为另一种类型及其子类的对象(例如将String转换为Number及Number子类(Integer, Long, Double)对象)可使用该转换器工厂类

    5.3. GenericConverter: 会根据源类对象及目标类对象所在的宿主类中的上下文信息进行类型转换。

6.下面代码会将自定义的ConversionService注册到Spring MVC的上下文中。

<mvc:annotation-driven conversion-service="conversionService"  />

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
	<property name="converters">
	<set>
		<ref bean="employeeConverter" />
	</set>
	</property>
</bean>
  1. 自己新增加的转换器不会影响Spring MVC原有转换器的正常工作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值