配置spingMVC日期转换器,最近在做一个很老的项目,各种问题不断,于是想重新架构下项目,上次遇到日期前端传到后端转换异常的问题,于是研究了一下,网上一查,各种错误。分享给小伙伴们一下。
我使用的spring版本为3.2.13.
spring配置文件里我这样配置:
<!-- 自定义转换器 --> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <list> <bean class="cn.hshb.core.common.DateConverter"></bean> </list> </property> </bean> <!-- 追加日期转化器 --> <mvc:annotation-driven conversion-service="conversionService" />
上面请注意:converters在FormattingConversionServiceFactoryBean中,网上很多代码都错了。
FormattingConversionServiceFactoryBean在spring-core包下。
转换类DateConverter:
package cn.hshb.core.common;
/**
* 时间日期转换类
* @author Macbook
*/
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.core.convert.converter.Converter;
public class DateConverter implements Converter<String,Date>{
private static final List<String> formarts = new ArrayList<String>(4);
static{
formarts.add("yyyy-MM");
formarts.add("yyyy-MM-dd");
formarts.add("yyyy-MM-dd hh:mm");
formarts.add("yyyy-MM-dd hh:mm:ss");
}
public Date convert(String source) {
String value = source.trim();
if ("".equals(value)) {
return null;
}
if(source.matches("^\\d{4}-\\d{1,2}$")){
return parseDate(source, formarts.get(0));
}else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")){
return parseDate(source, formarts.get(1));
}else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")){
return parseDate(source, formarts.get(2));
}else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")){
return parseDate(source, formarts.get(3));
}else {
throw new IllegalArgumentException("Invalid boolean value '" + source + "'");
}
}
/**
* 功能描述:格式化日期
*
* @param dateStr String 字符型日期
* @param format String 格式
* @return Date 日期
*/
public Date parseDate(String dateStr, String format) {
Date date=null;
try {
DateFormat dateFormat = new SimpleDateFormat(format);
date = (Date) dateFormat.parse(dateStr);
} catch (Exception e) {
}
return date;
}
public static void main(String[] args) {
System.err.println(new DateConverter().convert("2014-04-05"));
}
}
我这里把基本常用的格式都配置进来了。