Spring字符串转日期

Spring字符串转日期

Spring中我们的Bean有些属性是Date 但是通过容器注入属性的时候我们通过xml配置的属性,Spring容器无法将字符串转为Data给Bean属性注入。

 

JavaBean

public class Students {
    private int sid;
    private String username;
    private String gender;
    private Date birthday;

    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "Students{" +
                "sid=" + sid +
                ", username='" + username + '\'' +
                ", gender='" + gender + '\'' +
                ", birthday=" + birthday +
                '}';
    }
}

我们理所应当的向平常一样在xml中配置bean

<bean id="student" class="edu.xufe.entity.Students">
    <property name="sid" value="1605990418"></property>
    <property name="username" value="李四"></property>
    <property name="gender" value="男"></property>
    <property name="birthday" value="1996-11-28"></property>
</bean>

会发现有报错java.lang.String不能转换为java.util.Date

解决办法:

方法一:

配置一个字符串转日期的bean

<!--配置dateFormat 用于将bean中的字符串转为Date-->

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

student这个bean中更改birthday 的配置

<bean id="student" class="edu.xufe.entity.Students">
    <property name="sid" value="1605990418"></property>
    <property name="username" value="李四"></property>
    <property name="gender" value="男"></property>
    <property name="birthday">
        <bean factory-bean="dateFormat" factory-method="parse">
            <constructor-arg value="1996-11-28"/>
        </bean>
    </property>
</bean>

再次测试通过。

方法二:

自定义一个String转Date的转换类

public class MyDateConvert extends PropertyEditorSupport {

    /**

     * 字符串格式

     * yyyy-MM-dd yyyy/MM/dd

     * 或是其他 应由外部传入

     */

    private String format;



    public MyDateConvert(String format) {

        this.format = format;

    }

    public String getFormat() {

        return format;

    }



    public void setFormat(String format) {

        this.format = format;

    }



    @Override

    public void setAsText(String text) throws IllegalArgumentException {

        SimpleDateFormat sdf = new SimpleDateFormat(this.format);

        try {

            this.setValue(sdf.parse(text));

        } catch (ParseException e) {

            e.printStackTrace();

        }

    }

}

自定义一个注册器

public class MyCustomDateEditorRegistrar implements PropertyEditorRegistrar {



    private String format;



    public String getFormat() {

        return format;

    }



    public void setFormat(String format) {

        this.format = format;

    }



    @Override

    public void registerCustomEditors(PropertyEditorRegistry registry) {

        registry.registerCustomEditor(java.util.Date.class, new MyDateConvert(format));

    }



}

在xml中注入我们自定义的注册器

<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
    <property name="propertyEditorRegistrars">
        <list>
            <bean class="edu.xufe.convert.MyCustomDateEditorRegistrar">
                <property name="format" value="yyyy-MM-dd"></property>
            </bean>
        </list>
    </property>
</bean>

这一样我们就可以像普通属性一样配置bean

<bean id="student" class="edu.xufe.entity.Students">
    <property name="sid" value="1605990418"></property>
    <property name="username" value="李四"></property>
    <property name="gender" value="男"></property>
    <property name="birthday" value="1996-11-28"></property>
</bean>

测试转换成功 通过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值