Question

I am getting an org.springframework.beans.factory.BeanCreationException in my spring controller as I use ResponseList bean.

Error creating bean with name 'responseList' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: 1 constructor arguments specified but no matching constructor found in bean 'responseList' (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)

Here is the context part:

<bean id="response" class="com.form.response.Response" scope="prototype"></bean>    
    <bean id="myController" class="com.controllers.MyController" scope="prototype">
            <property name="response" ref="response"></property>
            <property name="responseList" ref="responseList"></property>
    </bean>
    <bean id="responseList" class="carey.form.response.ResponseList">
            <constructor-arg type="java.util.List">
                <list>
                   <ref bean="response"/>
                </list>
            </constructor-arg>
    </bean>

Here is the Bean:

package com.form.response;

import java.util.List;

public class ResponseList {

    public ResponseList() {
        // TODO Auto-generated constructor stub
    }

    private List<Response> responseList;

    public List<Response> getResponseList() {
        return responseList;
    }

    public void setResponseList(List<Response> responseList) {
        this.responseList = responseList;
    }

}

Can anyone please correct what I am missing here?

Was it helpful?

Solution

using constructor injection

<bean id="response" class="com.form.response.Response" scope="prototype"></bean>    
    <bean id="myController" class="com.controllers.MyController" scope="prototype">
            <property name="response" ref="response"></property>
            <property name="responseList" ref="responseList"></property>
    </bean>
    <bean id="responseList" class="carey.form.response.ResponseList">
            <constructor-arg type="java.util.List">
                <list>
                   <ref bean="response"/>
                </list>
            </constructor-arg>
    </bean>

then bean like

package com.form.response;

import java.util.List;

public class ResponseList {

    public ResponseList(List<Response> responseList) {
           this.responseList=responseList;
        // TODO Auto-generated constructor stub
    }

    private List<Response> responseList;

    public List<Response> getResponseList() {
        return responseList;
    }

    public void setResponseList(List<Response> responseList) {
        this.responseList = responseList;
    }

}

and if setter injection

<bean id="response" class="com.form.response.Response" scope="prototype"></bean>    
    <bean id="myController" class="com.controllers.MyController" scope="prototype">
            <property name="response" ref="response"></property>
            <property name="responseList" ref="responseList"></property>
    </bean>
    <bean id="responseList" class="carey.form.response.ResponseList">
            <property type="java.util.List">
                <list>
                   <ref bean="response"/>
                </list>
            </property>
    </bean>

then bean like

public class ResponseList {

    public ResponseList() {
    }

    private List<Response> responseList;

    public List<Response> getResponseList() {
        return responseList;
    }

    public void setResponseList(List<Response> responseList) {
        this.responseList = responseList;
    }

}

OTHER TIPS

The exception says, Error creating bean with name 'responseList' defined in ServletContext resource, Spring not getting a argument-ed constructor in ResponseList bean..

<bean id="responseList" class="carey.form.response.ResponseList">
        <constructor-arg type="java.util.List">
            <list>
               <ref bean="response"/>
            </list>
        </constructor-arg>
</bean>

Replace your no-arg constructor from

public ResponseList() {
    // TODO Auto-generated constructor stub
}

with

public ResponseList(List<Response> responseList){
    this.responseList = responseList;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top