Spring 4.0 中的字符串到日期转换

2023-11-21

我正在学习 Spring 4.0.0 M3 以下是代码,

Bean

package org.chebus.springs;

import java.util.Date;

public class Traingle {
    private String name;
    private int height;
    private Date date;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public void drawShape() {
        System.out.println(getName() + " Traingle height " + getHeight()
                + " Date = " + getDate());
    }

}

Main

ApplicationContext ctx = new ClassPathXmlApplicationContext("org/chebus/springs/Spring.xml");
        Traingle traingle = ctx.getBean("traingle",Traingle.class);
        traingle.drawShape();

XML配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean id = "traingle" class="org.chebus.springs.Traingle">
  <property name="name" value = "RightAngled"/>
  <property name="height" value = "20"/>
  <property name="date" value = "2013-09-10"/>
</bean>

<bean id="dateEditor"
        class="org.springframework.beans.propertyeditors.CustomDateEditor">

        <constructor-arg>
            <bean class="java.text.SimpleDateFormat">
                <constructor-arg value="yyyy-MM-dd" />
            </bean>
        </constructor-arg>
        <constructor-arg value="true" />

    </bean>

    <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
        <property name="customEditors">
            <map>
                <entry key="java.util.Date">
                    <ref local="dateEditor" />
                </entry>
            </map>
        </property>
    </bean>


</beans>

例外:

java.lang.IllegalArgumentException:无法转换类型的值 [org.springframework.beans.propertyeditors.CustomDateEditor] 到 属性所需的类型 [java.lang.Class] 'customEditors[java.util.Date]':PropertyEditor [org.springframework.beans.propertyeditors.ClassEditor] 返回 类型值不合适 [org.springframework.beans.propertyeditors.CustomDateEditor] 在 org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:260) 在 org.springframework.beans.TypeConverterDelegate.convertToTypedMap(TypeConverterDelegate.java:620) 在 org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:205) 在 org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:459) ... 17 更多

不知道我哪里出错了。感谢你的帮助。谢谢!


很好,这似乎是 Spring 4.0+ 的新行为,您的代码可以在 3.2.x 版本的 Spring 中正常工作。

原因似乎是因为customEditors in CustomEditorConfigurerSpring 4.0+ 发生了变化。而它是类型Map<String, ?>对于 Spring 3.2.x 来说是Map<Class<?>, Class<? extends PropertyEditor>>与 Spring 4.0+ 一起使用。

解决方法是创建一个自定义 PropertyEditorRegistrar,如下所示:

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.beans.PropertyEditorRegistrar;
import org.springframework.beans.PropertyEditorRegistry;
import org.springframework.beans.propertyeditors.CustomDateEditor;

public class CustomDateEditorRegistrar implements PropertyEditorRegistrar {

     @Override
     public void registerCustomEditors(PropertyEditorRegistry registry) {
         registry.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), false));
     }
}

并在配置中使用它:

<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
    <property name="propertyEditorRegistrars">
        <list>
            <bean class="dateeditor.CustomDateEditorRegistrar"/>
        </list>
    </property>
</bean>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring 4.0 中的字符串到日期转换 的相关文章

随机推荐