前台传输的日期类型参数,后台无法绑定的异常
前台参数在请求体中传输时,都会当作String类型。在与controller中与参数进行绑定时需要转换器,转成参数类型。Springmvc默认提供了很多参数转换器,例如String转int等。对于需要转成Date类型的数据来说,也有默认的转换器,默认情况下YYYY/MM/dd格式的数据可以转成Date类型。但如果我们提交的数据是YYYY-MM-dd格式的,就无法绑定Date类型的参数。
解决方法
既然springmvc提供的转日期类型的转换器无法满足我们的需求,我们就自定义消息转换器来代替默认提供的日期转换器。
实际操作
定义转换器
继承 Converter<String, Date>,String代表被转换的数据类型,Date代表转换的目标类型。这是对YYYY-MM-dd类型的数据转换。
package com.springmvc.converter;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String s) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = simpleDateFormat.parse(s);
return date;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
在spring-mvc.xml中声明
声明自定义的转换器,告诉springmvc使用自定义的转换器
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启mvc注解驱动-->
<mvc:annotation-driven conversion-service="conversionService"/>
<!--定义生产转换器的工厂,生成自定义的转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.springmvc.converter.DateConverter"></bean>
</set>
</property>
</bean>
<!--扫描包-->
<context:component-scan base-package="com.springmvc"></context:component-scan>
<mvc:default-servlet-handler></mvc:default-servlet-handler>
</beans>