问题描述:
在前端的输入框是文本框(text),但是我们的value是日期格式:“2019-12-23 02:30:13”,这时直接发送请求就会报400,原因是封装为对象时,我们的实体类中对应的属性是日期格式,所以封装失败。
解决方法:
在Spring-MVC配置文件中配置一下日期转换器。
springmvc.xml中:
<!--开启MVC注解框架支持-->
<!--<mvc:annotation-driven enable-matrix-variables="true"></mvc:annotation-driven>-->
<!--适配器和映射器-->
<mvc:annotation-driven conversion-service="myconverter" enable-matrix-variables="true"></mvc:annotation-driven>
<!--日期转换器-->
<bean id="myconverter" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.itLB.utils.MyDateConverter"></bean>
</set>
</property>
</bean>
其中com.itLB.utils.MyDateConverter是我们自定义的日期格式转换器工具类,具体代码:
package com.itLB.utils;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MyDateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
//创建SimpleDateFormat对象用来格式化时间,参数是时间格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//转换日期
Date date = null;
try {
date = sdf.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
这里需要说明的是:有的不配置自定义日期转换器并不会报错,只是日期只能对年月日进行转换,时分秒在存储到数据库时会发生精度丢失。我这里发生错误使用的spring所有包的版本均为5.0.2,故可能是版本不同产生的差异。