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>
测试转换成功 通过。