我有一个Bean for Date,我在Spring配置xml中以下列方式从spring注入一个Date。
<bean id="customer" class="com.my.common.Customer">
<property name="date" value="2014-11-12" />
</bean>
跑步后我收到以下错误:
Caused by: org.springframework.beans.TypeMismatchException:
Failed to convert property value of type [java.lang.String] to
required type [java.util.Date] for property 'date';
nested exception is java.lang.IllegalArgumentException:
Cannot convert value of type [java.lang.String] to
required type [java.util.Date] for property 'date':
no matching editors or conversion strategy found
为什么会这样?任何人都可以解释为什么它不起作用。
答案 0 :(得分:0)
即使Customer#date
是java.util.Date
,Spring怎么知道如何解析2014-11-12
输入字符串?当然yyyy-MM-dd
是一种非常常见的日期模式,但是没有标准默认日期模式。
一种解决方案是使用工厂bean:
<bean id="dateFormatter" class="java.text.SimpleDateFormat">
<constructor-arg value="yyyy-MM-dd" />
</bean>
<bean id="customer" class="com.veke.common.Customer">
<property name="date">
<bean factory-bean="dateFormatter" factory-method="parse">
<constructor-arg value="2014-11-12" />
</bean>
</property>
</bean>
答案 1 :(得分:0)
您必须在控制器类中添加自定义InitBinder
@InitBinder
public void initBinder(WebDataBinder dataBinder, Locale locale,HttpServletRequest request) {
//set your requred date format
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MMM/yyyy");
dateFormat.setLenient(false);
//spring will bind every Date String to java.util.Date
dataBinder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat,true));
}