今天做了了一个自定义PropertyEditor出现问题,字符串解析错误。下面我把相应的类与自定义的PropertyEditor写出,希望有人帮我解决一下:
java 代码
- package org.beans.beanwrapper;
- public class Address {
- private String street;
- private String doorNum;
- private String postCode;
- public String getStreet() {
- return street;
- }
- public void setStreet(String street) {
- this.street = street;
- }
- public String getDoorNum() {
- return doorNum;
- }
- public void setDoorNum(String doorNum) {
- this.doorNum = doorNum;
- }
- public String getPostCode() {
- return postCode;
- }
- public void setPostCode(String postCode) {
- this.postCode = postCode;
- }
- }
java 代码
- package org.beans.beanwrapper;
- public class Person {
- private String name;
- private Address address;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Address getAddress() {
- return address;
- }
- public void setAddress(Address address) {
- this.address = address;
- }
- }
java 代码
- package org.beans.beanwrapper;
- import java.beans.PropertyEditorSupport;
- import org.springframework.util.StringUtils;
- public class AddressProptertyEditor extends PropertyEditorSupport {
- public void setAsTest(String text) {
- // 支持的格式为 streeValue,doorNumValue,postCode
- System.out.println("使用自己的编辑器。");
- if (text == null || !StringUtils.hasText(text)) {
- throw new IllegalArgumentException("老大,不能为空啊!");
- }
- else
- {
- String[] strArr = StringUtils.tokenizeToStringArray(text,",");
- Address add = new Address();
- add.setStreet(strArr[0]);
- add.setDoorNum(strArr[1]);
- add.setPostCode(strArr[2]);
- setValue(add);
- }
- }
- }
java 代码
- package org.jms.beans.test;
- import junit.framework.TestCase;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import org.beans.beanwrapper.*;
- public class BeanWrapperTest extends TestCase {
- public void testWrapper() {
- ApplicationContext context = new ClassPathXmlApplicationContext(
- "classpath:resource/applicationContext.xml");
- Person person = (Person) context.getBean("person");
- System.out.println(person.getAddress());
- }
- }
自定义PropertyEditor注册配置文件如下
xml 代码
- <bean id="customEditorConfigurer"
- class="org.springframework.beans.factory.config.CustomEditorConfigurer">
- <property name="customEditors">
- <map>
- <entry key="org.beans.beanwrapper.Address"><!-- 属性类型 -->
- <bean
- class="org.beans.beanwrapper.AddressProptertyEditor" />
- <!--对应Address的编辑器 -->
- </entry>
- </map>
- </property>
- </bean>
- <bean id="person" class="org.beans.beanwrapper.Person">
- <property name="name" value="Tom" />
- <property name="address" value="朝阳区,Soho 1601,010101">
- </property>
- </bean>
出现问题的代码如下:
ruby 代码
- 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:
- 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
- Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessException details (1) are:
- 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
- Caused by: java.lang.IllegalArgumentException: 朝阳区,Soho 1601,010101
- at java.beans.PropertyEditorSupport.setAsText(Unknown Source)
- at org.springframework.beans.TypeConverterDelegate.convertValue(TypeConverterDelegate.java:253)
- at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:177)
- at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:127)
- at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:775)
- at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:608)
- at org.springframework.beans.AbstractPropertyAccessor.setPropertyValue(AbstractPropertyAccessor.java:49)
- at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:74)
- at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:57)
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:966)
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:729)
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:416)
- at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)
- at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141)
- at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)
- at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156)
- at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:642)
- at org.jms.beans.test.BeanWrapperTest.testWrapper(BeanWrapperTest.java:27)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
- at java.lang.reflect.Method.invoke(Unknown Source)
- at junit.framework.TestCase.runTest(TestCase.java:164)
- at junit.framework.TestCase.runBare(TestCase.java:130)
- at junit.framework.TestResult$1.protect(TestResult.java:110)
- at junit.framework.TestResult.runProtected(TestResult.java:128)
- at junit.framework.TestResult.run(TestResult.java:113)
- at junit.framework.TestCase.run(TestCase.java:120)
- at junit.framework.TestSuite.runTest(TestSuite.java:228)
- at junit.framework.TestSuite.run(TestSuite.java:223)
- at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:35)
- at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
- at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
- at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
- at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
- at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
- at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)