spring配置Converter、Formatter日期转换器

最近有点恶补spring的嫌疑,然后学了一点知识点纪录在此。

往往在项目中我们会遇到前端页面输入一个日期类型的字符串传递到后端后我们需要去做转换。甚至在传递的过程中就会报错。

Spring有一个一劳永逸的办法,配置好按照自己的规则转换后就不需要再java后端继续转换了

需要spring的jar可以到spring官方网站去下载。

1.首先第一种 convertor转换器

package com.converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;

public class StringDate implements Converter<String, Date>{

    // 日期转换格式
    private String pattern;
    // 构造函数
    public StringDate(String pattern) {
        super();
        this.pattern = pattern;
    }

    @Override
    public Date convert(String arg0) {  
        //  yyyy-MM-dd 
        SimpleDateFormat sd = new SimpleDateFormat(pattern);
        try {
            return sd.parse(arg0);
        } catch (ParseException e) {
            //e.printStackTrace();
            throw new IllegalAccessError("日期转换出错!!");
        }
    }

}

需要在springMVC-servlet.xml配置文件中配置一下内容  (springMVC-servlet文件具体的可以查看我的上一篇文章 springMVC+springJDBC+Mysql注解模式)

<!-- 日期转换工厂 -->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="com.converter.StringDate">
                    <constructor-arg type="java.lang.String" value="yyyy-MM-dd"></constructor-arg>
                </bean>
            </list>
        </property>
    </bean>


2.第二种方式 Formatter转换器

package com.converter2;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import org.springframework.core.convert.converter.Converter;
import org.springframework.format.Formatter;


/**
 * 日期类型转换器
 * @author Administrator
 *
 */
public class StringDate2 implements Formatter<Date>{

    // 日期转换格式
    private String pattern;
    private SimpleDateFormat sd;
    
    // 构造函数
    public StringDate2(String pattern) {
        super();
        this.pattern = pattern;
        sd = new SimpleDateFormat(pattern);
    }
    
    @Override
    public String print(Date object, Locale locale) {
        //加上这句话  就需要按照日期规范去转   类似1999-15-15就会报错
        sd.setLenient(false);
        return sd.format(object);
    }
    @Override
    public Date parse(String text, Locale locale) throws ParseException {
        sd.setLenient(false);
        return sd.parse(text);
    }


}

需要在springMVC-servlet.xml配置文件中配置一下内容

<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="formatters">
            <list>
                <bean class="com.converter2.StringDate2">
                    <constructor-arg type="java.lang.String" value="yyyy-MM-dd"></constructor-arg>
                </bean>
            </list>
        </property>
    </bean>


以上方式只要在页面输入指定格式 value="yyyy-MM-dd" 的字符串然后发送请求并且将参数带到controller中spring就会自动转换为日期类型

原文地址:https://www.cnblogs.com/Faith-zhang/p/7656654.html