SpringMVC学习之三转换器和格式化

序:数据绑定并非没有限制,有案例表明Spring在如何正确绑定数据方面是杂乱无章的。例如,Spring总是试图用默认的语言区域将日期输入绑定到Java.util.Date。如果想让Spring使用不同的时间格式,就需要一个Converter(转换器)和Formatter(格式化)

1.Converter  可以将一种类型转换为另一个种类型的对象,可用于任何层

创建Converter,必须编写一个实现org.springframework.core.convert.converter.Cnoverter接口的Java类,该接口的声明为 public interface Converter<S,T> S表示源类型,T表示目标类型。

Java类的声明应该为  :

public class MyConverter implements Converter<Long , Date>{}   将Long型转换为Date类型

需要编写一个来自Converter接口的convert方法,方法签名为 T convert (S  source) ,代码如下:

public class DateConverter implements Converter<String,Date> {


    @Override
    public Date convert(String source) {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try{
            return sdf.parse(source);
        }catch(Exception e) {
           throw new IllegalArgumentException("cuol");
        }

    }
}



为了使用Spring MVC中定制的Converter,需要在SpringMVC配置文件中编写一个 conversionService bean。Bean的类名必须为   org.springframework.context.support.ConversionServiceFactoryBean。这个bean必须包含一个converters属性,它将列出要在应用要在应用程序中使用的所有定制的Converter

如下:
    <bean id="converterService"
        class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters" >
            <list>
                <bean class="com.Converter.StringToDateConverter">  //自己书写的java类
                    <constructor-arg type="java.lang.String" value="MM-dd-yyyy" />  //用构造函数的方式给类内值赋值,如上面的没有构造函数和字符串变量,这个可以不配置
                </bean>
            </list>
        </property>
    </bean>

要给annotation-driven元素的conversion-service属性赋bean名称,如下:

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

2. Formatter 格式化 只能将String类型转换为另一种类型,只适用于Web层

1)为了创建Formatter ,要编写一个实现org.springframework.format.Formatter接口的Java类 ,该接口的声明为 public interface Formatter <T>  T为目标类型,该接口有parseprint两个方法,所有实现都必须覆盖

T parse(String text, java.util.Locale locale)      parse 方法利用指定的Locale将一个String类型解析成目标类型

String print(T object ,java.util.Locale locale)     print方法返回目标对象的字符串表示法

为了在Spring中使用Formatter ,需要利用conversionService bean进行注册 ,bean的类名必须为org.springframework.format.support.FormattingConversionService

在SpringMVC中配置

<context:component-scan base-package="包名.子包名">

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

   <bean id="converterService"
        class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="formatters" >
          <set>
                <bean class="com.formatter.DateFormatter">
                    <constructor-arg type="java.lang.String" value="MM-dd-yyyy" />
                </bean>
            </set>
        </property>
    </bean>

2)用Registrar注册Formatter

编写一个MyFormatterRegistrar的Java类,继承FormatterRegistrar接口

public class MyFormatterRegistrar implements FormatterRegistrar {

private String datePattern ;

public MyFormatterRegistrar(String datePattern){

 this,datePattern = datePattern ;

}

@Override

public void registerFormatters(FormatterRegistry registry){

registry.addFormatter(new DateFormatter(datePattern));

//register more formatters here

}

}

然后有了Registrar 就不需在SpringMVC的配置文件中注册任何Formatter了。只需要注册Registrar ,如下:

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

   <bean id="converterService"
        class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="formatters" >
          <set>
                <bean class="com.formatter.MyFormatterRegistrar">
                    <constructor-arg type="java.lang.String" value="MM-dd-yyyy" />
                </bean>
            </set>
        </property>
    </bean>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值