`
izuoyan
  • 浏览: 8934503 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring属性注入中的date注入异常解决方案

阅读更多

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'user' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.lang.String] to required type [java.util.Date] for property 'inDate'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [java.lang.String] to required type [java.util.Date] for property 'inDate': no matching editors or conversion strategy found
Caused by: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.lang.String] to required type [java.util.Date] for property 'inDate'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [java.lang.String] to required type [java.util.Date] for property 'inDate': no matching editors or conversion strategy found
Caused by: java.lang.IllegalArgumentException: Cannot convert value of type [java.lang.String] to required type [java.util.Date] for property 'inDate': no matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:231)
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:138)
at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:380)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1112)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:862)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:424)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:287)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:91)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:75)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65)
at main.Test.main(Test.java:12)

----------------------------------------------------------

代码:

package domain;

import java.util.Date;
import java.util.List;

public class User {
private String userName;
private int userAge;
private List userHobby;
private Date inDate;
public Date getInDate() {
return inDate;
}
public void setInDate(Date inDate) {
this.inDate = inDate;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
public List getUserHobby() {
return userHobby;
}
public void setUserHobby(List userHobby) {
this.userHobby = userHobby;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}

public void say()
{
System.out.println("myName is "+this.getUserName());
for(int i=0;i<this.getUserHobby().size();i++)
{
System.out.println("my hobby is "+this.getUserHobby().get(i).toString());
}
System.out.println("my income date is "+this.getInDate());
}
}

spring配置文件:

<property name="inDate">
<value>1984-04-11</value>
</property>

这样是不行的 看了也知道 这个1984-04-11是字符串 怎么能赋给date呢 那怎么解决呢 那我们就要写个属性编辑器(转换器?)

----------------------------------------------------------------------解决步骤-------------------------------------------------

1 写一个dateEditor 来继承 java.beans.PropertyEditorSupport;

package util;

import java.beans.PropertyEditorSupport;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateEditor extends PropertyEditorSupport {

@Override
public void setAsText(String dateStr) throws IllegalArgumentException {
Date d =this.parseToDate(dateStr);
this.setValue(d);
}

private Date parseToDate(String date)
{
String format = "yyyy-MM-dd";
DateFormat df =new SimpleDateFormat(format);
Date d = null;
try {
d = df.parse(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return d;
}
}

写好之后 我们可以专门写一个配置文件放这个

applicationContext-editor.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.0.xsd">
<bean id="dateEditor" class="org.springframework.beans.factory.config.CustomEditorConfigurer"><!--注册我们的类-->
<property name="customEditors">
<map>
<entry key="java.util.Date">
<bean class="util.DateEditor"></bean>
</entry>
</map>
</property>
</bean>
</beans>

------------------------------------------------------ok 大功告成 测试----------------------------------

BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext-*.xml");
User user = (User)factory.getBean("user");
user.say();

--------------------------------------输出结果-------------------------------
my income date is Wed Apr 11 00:00:00 CST 1984 只是这里为没按照 yyyy-MM-dd来输出 奇怪哦


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics