背景
写程序的时候遇到了 前端传入的数据类型为 字符串的日期数据,后端接受的应该是 Date类型的日期数据 而报错的问题。
Field error in object 'studentCustom' on field 'birthyear': rejected value [1979-01-01]; codes [typeMismatch.studentCustom.birthyear,typeMismatch.birthyear,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [studentCustom.birthyear,birthyear]; arguments []; default message [birthyear]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'birthyear'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value '1979-01-01'; nested exception is java.lang.IllegalArgumentException]
方法一:实体类中加日期格式化注解
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date receiveAppTime;
如上,在对应的属性上,加上指定日期格式的注解
方法二:实现一个全局日期类型转换器并进行配置
springmvc配置Data类型转换器
在创建一个转换器的包cn.my.ssm.controller.converter,创建一个CustomDateConverter类实现Converter
package cn.my.ssm.controller.converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.core.convert.converter.Converter;
/**
* date类型转换
*
*/
public class CustomDateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
return simpleDateFormat.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
springmvc.xml
<!-- 配置转换器(比如Date类型) -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="cn.my.ssm.controller.converter.CustomDateConverter" />
</list>
</property>
</bean>
jsp 页面配置
<!--使用jstl标签返回时间格式-->
<p><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></p>
方法三:适合页面把日期类型转换成字符串且JSP,Freemark页面
JSP模版引擎方法:
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<fmt:formatDate value="${job.jobtime }" pattern="yyyy-MM-dd HH:mm:ss"/>
Freemarker模版引擎方法:
<input id="receiveAppTime" name="receiveAppTime" type="text" value="${(bean.receiveAppTime?string('yyyy-MM-dd'))!}" />