JAVA Spring web mvc 学习 之 6:数据类型转换

来源:互联网 发布:网络理财产品收益排名 编辑:程序博客网 时间:2024/06/02 02:38

3种方式:

1.自定义全局转换器。ConversionService

  a.定义转换类我
public class StringToDateConverter implements Converter<String , Date>{


    // 日期类型模板:如yyyy-MM-dd
    private String datePattern;


    public void setDatePattern(String datePattern) {
        this.datePattern = datePattern;
    }


    // Converter<S,T>接口的类型转换方法
    public Date convert(String date) {
        try {
            SimpleDateFormat dateFormat = new SimpleDateFormat(this.datePattern);
            // 将日期字符串转换成Date类型返回
            return dateFormat.parse(date);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("日期转换失败!");
            return null;
        }


    }
}
  b.配置自定义转换器
    <!-- 装配自定义的类型转换器 -->
    <mvc:annotation-driven conversion-service="conversionService"/>
    <!-- 自定义的类型转换器 -->
    <bean id="conversionService"
          class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="priv.yzying.converter.StringToDateConverter"
                      p:datePattern="yyyy-MM-dd"></bean>
            </list>
        </property>
    </bean>

2.使用@IintBinder,注册控制器转换,配合 PropertyEditorSupport
  a.定义属性编辑器,实现 PropertyEditorSupport 类
// 自定义属性编辑器
public class DateEditor extends PropertyEditorSupport {
    // 将传如的字符串数据转换成Date类型
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date = dateFormat.parse(text);
            setValue(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }


}
  b.控制器注册属性编辑器
    @InitBinder
public void initBinder(WebDataBinder binder){
 binder.registerCustomEditor(Date.class,new DateEditor());
}
3.使用WebBindingInitializer注册全局自定义编辑器转换数据
  a.定义属性编辑器,实现
  // 自定义属性编辑器
public class DateEditor extends PropertyEditorSupport {


// 将传如的字符串数据转换成Date类型
@Override
public void setAsText(String text) throws IllegalArgumentException {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = dateFormat.parse(text);
setValue(date);
} catch (ParseException e) {
e.printStackTrace();
}
}

}
  b.定义WebBindingInitializer实现类
// 实现WebBindingInitializer接口
public class DateBindingInitializer implements WebBindingInitializer {


@Override
public void initBinder(WebDataBinder binder, WebRequest request) {
// 注册自定义编辑器
binder.registerCustomEditor(Date.class, new DateEditor());


}


}
  c.配置自定义转换编辑器
    <!-- 通过AnnotationMethodHandlerAdapter装配自定义编辑器 -->
    <bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<bean class="org.fkjava.binding.DateBindingInitializer" />
</property>
</bean>


以上几种方式优先级:@InitBinder > ConversionService > WebBindingInitializer



原创粉丝点击