Bean集合Spring:ConversionNotSupportedException

时间:2015-08-05 10:44:30

标签: java xml spring maven spring-mvc

我是Spring的新手,我尝试创建一个简单的快速启动应用程序。 我的应用程序由三个java类组成,即pom.xml文件和另一个xml文件:

Produttore.java:

package com.mkyong.core;

import org.springframework.stereotype.Component;

@Component
public class Produttore {
    private int iD;
    private String ruolo;


    public int getiD() {
        return iD;
    }
    public void setiD(int iD) {
        this.iD = iD;
    }
    public String getRuolo() {
        return ruolo;
    }
    public void setRuolo(String ruolo) {
        this.ruolo = ruolo;
    }


    @Override
    public String toString(){
        return "Produttore " + iD + ", ruolo " + ruolo;
    }


}

Team.java:

package com.mkyong.core;

import java.util.List;

import org.springframework.stereotype.Component;

@Component
public class Team {

    private Produttore Leader;
    private List<Produttore> membri;


    public Produttore getLeader() {
        return Leader;
    }
    public void setLeader(Produttore leader) {
        Leader = leader;
    }
    public List<Produttore> getMembri() {
        return membri;
    }

    public void setMembri(List<Produttore> membri) {
            this.membri = membri;
    }

    public void addMembri(Produttore p){
        this.membri.add(p);
    }

    @Override
    public String toString(){
        return "Trainer " + Leader + " numero membri: " + membri.size();
    }
}

test1.java:

package com.mkyong.core;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class test1 {
    public static void main(String[] args){
        ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"Test1xml.xml"});
        Team ris=(Team)context.getBean("TeamBean");
        System.out.println(ris);
    }
}

Test1xml.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-2.5.xsd">

    <bean id="ProduttoreBean" class="com.mkyong.core.Produttore">
                <property name="iD" value="1234"/>
                <property name="ruolo" value="Trainer"/>
    </bean>

    <bean id="TeamBean" class="com.mkyong.core.Team">
        <property name="Leader">
            <bean class="com.mkyong.core.Produttore">
            <property name="iD" value="1111"></property>
            <property name="ruolo" value="Trainer"/>
            </bean>
        </property>
        <property name="membri">
            <util:list list-class="java.util.ArrayList">
                <value>0</value>
                    <ref bean="ProduttoreBean2" />
            </util:list>
        </property> 
    </bean>

    <bean id="ProduttoreBean2" class="com.mkyong.core.Produttore">
                    <property name="iD" value="1112" />
                    <property name="ruolo" value="Junior"/>
    </bean>
</beans>

的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
    http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mkyong.core</groupId>
    <artifactId>Spring3Example</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>Spring3Example</name>
    <url>http://maven.apache.org</url>

    <properties>
        <spring.version>3.0.5.RELEASE</spring.version>
    </properties>

    <dependencies>

        <!-- Spring 3 dependencies -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

    </dependencies>
</project>

我不知道为什么,但是当我尝试午餐时,它失败了。我发布错误:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TeamBean' defined in class path resource [Test1xml.xml]: Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.util.ArrayList' to required type 'java.util.List' for property 'membri'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.mkyong.core.Produttore] for property 'membri[0]': no matching editors or conversion strategy found
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
    at com.mkyong.core.test1.main(test1.java:8)
Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.util.ArrayList' to required type 'java.util.List' for property 'membri'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.mkyong.core.Produttore] for property 'membri[0]': no matching editors or conversion strategy found
    at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:462)
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:499)
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:493)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1371)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1330)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
    ... 11 more
Caused by: java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.mkyong.core.Produttore] for property 'membri[0]': no matching editors or conversion strategy found
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:231)
    at org.springframework.beans.TypeConverterDelegate.convertToTypedCollection(TypeConverterDelegate.java:520)
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:173)
    at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:447)
    ... 17 more

有人可以帮助我吗?非常感谢

2 个答案:

答案 0 :(得分:1)

将[java.lang.String]类型的值转换为属性'membri [0]'所需的类型[com.mkyong.core.Produttore]:这告诉Spring无法转换在arrayList的第一个位置键入Produttore的String值。请参阅以下说明: -

private List<Produttore> membri;

错误是因为上面的行。因为在这里你要定义名为membri的arraylist将包含Produttore类型的对象,但是在xml中将String值放在第一个位置,即0:

<util:list list-class="java.util.ArrayList" value-   type="com.mkyong.core.Produttore">
            *<value>0</value>*
                <ref bean="ProduttoreBean2" />
        </util:list>

如果您在Team类中转换membri的decalaration,如下所示代码将起作用:

private List<Object> membri;

public List<Object> getMembri() {
    return membri;
}

public void setMembri(List<Object> membri) {
    this.membri = membri;
}

答案 1 :(得分:0)

您还应该为您在Test1xml.xml中定义的列表提供“value-type”属性。

应该是这样的: -

<property name="membri">
            <util:list list-class="java.util.ArrayList" value-type="com.mkyong.core.Produttore">
                <value>0</value>
                    <ref bean="ProduttoreBean2" />
            </util:list>
        </property>