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

来源:互联网 发布:宁波大学网络教育平台 编辑:程序博客网 时间:2024/05/02 01:43
 

 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来输出 奇怪哦

 

 


 

原创粉丝点击