spring - 无法创建内部bean'org.szymon.email.classes.MyMapperClass

标签 spring rest exception compiler-errors javabeans

我有异常类型:org.springframework.beans.factory.BeanCreationException
全栈:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.view.ContentNegotiatingViewResolver#0' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Cannot create inner bean 'org.szymon.email.classes.MyMapperClass#1e222db' of type [org.szymon.email.classes.MyMapperClass] while setting bean property 'defaultViews' with key [1]; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.szymon.email.classes.MyMapperClass] for bean with name 'org.szymon.email.classes.MyMapperClass#1e222db' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]; nested exception is java.lang.ClassNotFoundException: org.szymon.email.classes.MyMapperClass
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:282)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:121)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:353)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:154)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1417)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1158)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)

我的dispatcher-servlet.xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">


<context:component-scan base-package="org.szymon.email.*" />

<tx:annotation-driven />

<mvc:annotation-driven />                                       

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <property name="favorPathExtension" value="true"/>
    <property name="mediaTypes">
        <map>
            <entry key="json" value="application/json"/>
            <entry key="jsonp" value="application/javascript"/>
        </map>
    </property>
    <property name="defaultViews">
        <list>
            <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>
            <bean class="org.szymon.email.classes.MyMapperClass"/>
        </list>
    </property>
</bean>

</beans>

和我的MyMapperClass:
package org.szymon.email.classes;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.view.json.MappingJacksonJsonView;

public class MyMapperClass extends MappingJacksonJsonView {

    /**
     * Default content type. Overridable as bean property.
     */
    public static final String DEFAULT_CONTENT_TYPE = "application/javascript";

    @Override
    public String getContentType() {
        return DEFAULT_CONTENT_TYPE;
    }

    /**
     * Prepares the view given the specified model, merging it with static
     * attributes and a RequestContext attribute, if necessary.
     * Delegates to renderMergedOutputModel for the actual rendering.
     * @see #renderMergedOutputModel
     */
    @Override
    public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception {

        if("GET".equals(request.getMethod().toUpperCase())) {
            @SuppressWarnings("unchecked")
            Map<String, String[]> params = request.getParameterMap();

            if(params.containsKey("callback")) {
                response.getOutputStream().write(new String(params.get("callback")[0] + "(").getBytes());
                super.render(model, request, response);
                response.getOutputStream().write(new String(");").getBytes());
                response.setContentType("application/javascript");
            }

            else {
                super.render(model, request, response);
            }
        }

        else {
            super.render(model, request, response);
        }
    }
}

这是从问题中解决问题的延续:
Spring RESTful ajax gets error

还有一件有趣的事。
当我像这样对这个bean发表评论时:
<!-- <bean class="org.szymon.email.classes.MyMapperClass"/> -->

并在我的 Controller 上的方法中创建此类的实例并调用它的render方法,那么一切都很好……但这不是适当的解决方案。

请帮忙。
干杯

最佳答案

这个问题似乎是一个构建-与IDE有关。我既可以通过IntellIJ IDEA运行项目,也可以通过执行Maven构建并将产生的 war 放置在Tomcat的webapps目录中来运行该项目。

我建议您做一个Maven clean-compile-package,然后再试一次

关于spring - 无法创建内部bean'org.szymon.email.classes.MyMapperClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23216391/

相关文章:

java - DAO 和服务层(JPA/Hibernate + Spring)

java - web.xml 是否有基于正则表达式的 servlet 过滤器?

java - jBPM 6.1 人工任务 REST 开始/完成

java - Restful 网络服务 - NoClassDefFoundError : org/glassfish/jersey/ExtendedConfig

c++ - 为什么 std::ios_base::failure 有两个继承图,有什么区别?

c++ - 在可见性有限的 `std::terminate` 函数中调用 `noexcept` - gcc vs clang codegen

c++ - 使用 STL 字符串和 vector 类的异常问题

spring - Kotlin Hibernate 中删除 ManyToOne 列表类型

java - Google App Engine - Spring 安全问题 (java.security.AccessControlException)

Firebase 云消息传递 : REST API responds with "INVALID_KEY"