为什么我们不能从Spring注入DATA Direct?

时间:2014-11-13 08:55:59

标签: java spring spring-mvc

我有一个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

为什么会这样?任何人都可以解释为什么它不起作用。

2 个答案:

答案 0 :(得分:0)

即使Customer#datejava.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));
}