springMVC自定义类型转换

本文介绍了SpringMVC的数据绑定过程,包括通过DataBinder实例进行类型转换和数据格式化,利用Validator组件完成数据验证,以及如何自定义类型转换器。

SpringMVC数据绑定的流程

在这里插入图片描述

Spring MVC数据绑定流程

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

Spring支持的转换器

Spring定义了3种类型的转换器接口,实现任意一个转换器接口都可以作为自定义转换器注册到ConversionServiceFactoryBean中。
Converter<S,T>:将S类型转换为T类型。
ConverterFactory:将相同系列的多个“同质”Converter封装在一起,如果希望一种类型转换成另一种类型及其子类对象(例如String转换为Number及Number的子类(Integer,Long,Double等)),可以使用该转换器工厂。
GenericConverter:会根据源类对象及目标类对象所在的宿主类中的上下文信息进行类型转换。

配置xml

//自定义类型转换器对象
<bean id="myDateConverter" class="com.znsd.springmvc.converter.DateConverter"></bean>
<bean id="myconverter" class="org.springframework.context.support.ConversionServiceFactoryBean">
            //name里的值是固定的
		    <property name="converters">
			    <set>
			       //引用自定义类型转换器对象
			       <ref bean="myDateConverter"/>
			    </set>
		    </property>
		</bean>
		<mvc:annotation-driven conversion-service="myconverter" />
		<mvc:default-servlet-handler/>

添加自定义类型转换器

当碰到一些特殊场合,有可能需要我们自己定义类型转换器。

@Component
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String text) {
Date date = null;
  try {
      if (text.contains("-")) {
      SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
       date = sf.parse(text);
      } else {
      SimpleDateFormat sf = new SimpleDateFormat("dd/MM/yyyy");
      date = sf.parse(text);
      }
   } catch (Exception e) {
     e.printStackTrace();
  }
  return date;
 }
}

这个类会在执行操作之前获取到值转换成你所需要的格式和类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值