如何解决自定义PropertyEditor问题

今天做了了一个自定义PropertyEditor出现问题,字符串解析错误。下面我把相应的类与自定义的PropertyEditor写出,希望有人帮我解决一下:

 

java 代码
  1. package org.beans.beanwrapper;   
  2.   
  3. public class Address {   
  4.     private String street;   
  5.   
  6.     private String doorNum;   
  7.   
  8.     private String postCode;   
  9.   
  10.     public String getStreet() {   
  11.         return street;   
  12.     }   
  13.   
  14.     public void setStreet(String street) {   
  15.         this.street = street;   
  16.     }   
  17.   
  18.     public String getDoorNum() {   
  19.         return doorNum;   
  20.     }   
  21.   
  22.     public void setDoorNum(String doorNum) {   
  23.         this.doorNum = doorNum;   
  24.     }   
  25.   
  26.     public String getPostCode() {   
  27.         return postCode;   
  28.     }   
  29.   
  30.     public void setPostCode(String postCode) {   
  31.         this.postCode = postCode;   
  32.     }   
  33. }   
java 代码
  1. package org.beans.beanwrapper;   
  2.   
  3. public class Person {   
  4.     private String name;   
  5.   
  6.     private Address address;   
  7.   
  8.     public String getName() {   
  9.         return name;   
  10.     }   
  11.   
  12.     public void setName(String name) {   
  13.         this.name = name;   
  14.     }   
  15.   
  16.     public Address getAddress() {   
  17.         return address;   
  18.     }   
  19.   
  20.     public void setAddress(Address address) {   
  21.         this.address = address;   
  22.     }   
  23.   
  24. }   
java 代码
  1. package org.beans.beanwrapper;   
  2.   
  3. import java.beans.PropertyEditorSupport;   
  4.   
  5. import org.springframework.util.StringUtils;   
  6.   
  7. public class AddressProptertyEditor extends PropertyEditorSupport {   
  8.     public void setAsTest(String text) {   
  9.         // 支持的格式为 streeValue,doorNumValue,postCode   
  10.             System.out.println("使用自己的编辑器。");      
  11.             if (text == null || !StringUtils.hasText(text)) {      
  12.                 throw new IllegalArgumentException("老大,不能为空啊!");      
  13.             }      
  14.             else     
  15.             {      
  16.                 String[] strArr = StringUtils.tokenizeToStringArray(text,",");      
  17.                 Address add = new Address();      
  18.                 add.setStreet(strArr[0]);      
  19.                 add.setDoorNum(strArr[1]);      
  20.                 add.setPostCode(strArr[2]);      
  21.                 setValue(add);      
  22.             }      
  23.         }      
  24. }   
java 代码
  1. package org.jms.beans.test;   
  2.   
  3. import junit.framework.TestCase;   
  4.   
  5. import org.springframework.context.ApplicationContext;   
  6. import org.springframework.context.support.ClassPathXmlApplicationContext;   
  7. import org.beans.beanwrapper.*;   
  8.   
  9. public class BeanWrapperTest extends TestCase {   
  10.     public void testWrapper() {   
  11.         ApplicationContext context = new ClassPathXmlApplicationContext(   
  12.                 "classpath:resource/applicationContext.xml");   
  13.   
  14.         Person person = (Person) context.getBean("person");   
  15.         System.out.println(person.getAddress());   
  16.            
  17.     }   
  18. }   

自定义PropertyEditor注册配置文件如下

xml 代码
  1. <bean id="customEditorConfigurer"  
  2.         class="org.springframework.beans.factory.config.CustomEditorConfigurer">  
  3.         <property name="customEditors">  
  4.             <map>  
  5.                 <entry key="org.beans.beanwrapper.Address"><!-- 属性类型 -->  
  6.                     <bean  
  7.                         class="org.beans.beanwrapper.AddressProptertyEditor" />  
  8.                     <!--对应Address的编辑器 -->  
  9.                 </entry>  
  10.             </map>  
  11.         </property>  
  12.     </bean>  
  13.   
  14.     <bean id="person" class="org.beans.beanwrapper.Person">  
  15.         <property name="name" value="Tom" />  
  16.         <property name="address" value="朝阳区,Soho 1601,010101">  
  17.         </property>  
  18.     </bean>  

出现问题的代码如下:

ruby 代码
  1. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'person' defined in class path resource [resource/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:   
  2. PropertyAccessException 1: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.lang.String] to required type [org.beans.beanwrapper.Address] for property 'address'; nested exception is java.lang.IllegalArgumentException: 朝阳区,Soho 1601,010101   
  3. Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessException details (1) are:   
  4. PropertyAccessException 1:   
  5. org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.lang.String] to required type [org.beans.beanwrapper.Address] for property 'address'; nested exception is java.lang.IllegalArgumentException: 朝阳区,Soho 1601,010101   
  6. Caused by: java.lang.IllegalArgumentException: 朝阳区,Soho 1601,010101   
  7.     at java.beans.PropertyEditorSupport.setAsText(Unknown Source)   
  8.     at org.springframework.beans.TypeConverterDelegate.convertValue(TypeConverterDelegate.java:253)   
  9.     at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:177)   
  10.     at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:127)   
  11.     at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:775)   
  12.     at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:608)   
  13.     at org.springframework.beans.AbstractPropertyAccessor.setPropertyValue(AbstractPropertyAccessor.java:49)   
  14.     at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:74)   
  15.     at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:57)   
  16.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:966)   
  17.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:729)   
  18.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:416)   
  19.     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)   
  20.     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141)   
  21.     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)   
  22.     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156)   
  23.     at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:642)   
  24.     at org.jms.beans.test.BeanWrapperTest.testWrapper(BeanWrapperTest.java:27)   
  25.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)   
  26.     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)   
  27.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)   
  28.     at java.lang.reflect.Method.invoke(Unknown Source)   
  29.     at junit.framework.TestCase.runTest(TestCase.java:164)   
  30.     at junit.framework.TestCase.runBare(TestCase.java:130)   
  31.     at junit.framework.TestResult$1.protect(TestResult.java:110)   
  32.     at junit.framework.TestResult.runProtected(TestResult.java:128)   
  33.     at junit.framework.TestResult.run(TestResult.java:113)   
  34.     at junit.framework.TestCase.run(TestCase.java:120)   
  35.     at junit.framework.TestSuite.runTest(TestSuite.java:228)   
  36.     at junit.framework.TestSuite.run(TestSuite.java:223)   
  37.     at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:35)   
  38.     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)   
  39.     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)   
  40.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)   
  41.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)   
  42.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)   
  43.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)   
  44.   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值