【问题标题】:Spring MVC and JSON, Jackson class not found exceptionSpring MVC 和 JSON,Jackson 类未找到异常
【发布时间】:2012-02-28 11:35:45
【问题描述】:

我无法让 Spring 的 JSON 支持工作。在我的 spring-servlet.xml 文件中,我包含了以下几行:

<mvc:annotation-driven/>
<context:component-scan base-package="my.packagename.here" />
<context:annotation-config />

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"
    p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />

<bean id="jacksonMessageConverter"
    class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>

我还下载了 jackson 库并将它们添加到我的 eclipse 项目以及 WEB-INF/lib 文件夹中。使用 jQuery getJSON 方法向控制器发送请求时,出现以下错误:

javax.servlet.ServletException: Servlet.init() for servlet dispatcher threw exception
java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonProcessingException
java.lang.ClassNotFoundException: org.codehaus.jackson.JsonProcessingException

你认为是什么问题。我猜这与我的spring-servlet.xml 文件有关。如果需要,我可以粘贴整个错误日志。

【问题讨论】:

  • 你添加了哪些杰克逊罐子?
  • 我对 Jackson v2.0.1 jar 也有同样的问题。所有 jars(核心、注释、数据绑定)就位。您是否偶然解决了这个问题?
  • 那么这是 jackson 1.x 和 2.x 之间的不匹配吗?我注意到抱怨的类是 org.codehaus.jackson.JsonProcessingException。我打开我的jar文件,路径与JsonProcessingException完全不同,即org.springframework......JsonProcessingException
  • 我遇到了同样的问题并通过将spring 3更改为4并添加了org.springframework.http.converter.json.MappingJackson2HttpMessageConverter解决了问题

标签: json spring-mvc jackson


【解决方案1】:

对于 Jackson v2 jar,用于 bean 的类应该是

<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />

对于较旧的杰克逊版本,org.springframework.http.converter.json.MappingJacksonHttpMessageConverter 是可以的。确保将 jar 文件添加到项目库中。

【讨论】:

  • 非常感谢,你帮了我很多。
【解决方案2】:

anshul tiwari 的回答部分抓住了这个问题。这是一个更完整的答案...

当 Jackson 升级到 2.0 版时,核心库从 jackson-core-asl-x.x.x.jar 更改为 jackson-core-x.x.x.jar。就这样,路径发生了变化。在版本 1 中,org.codehaus.jackson 是路径。在版本 2 中,如果您要打开 jar 文件,它位于 com.fasterxml.jackson.core 中。

现在,如果您有版本 2 的库并且您看到 org.codehaus.jackson ClassNotFoundException,这意味着存在版本混合。有些代码需要 v1,但您提供了 v2。这在使用 Spring 时当然是可能的,因此您必须小心为您的代码选择正确的 jar 文件。

编辑

事实上,查看 3.2 Spring 源代码,org.springframework.http.converter.json.MappingJacksonHttpMessageConverter 仍然引用 org.codehaus 的东西,所以这是一个 Spring 源代码需要导入正确路径而开发人员无法使用 jackson 的情况2.

【讨论】:

  • 这个答案刚刚结束了 6 小时的头撞砖墙。如果我可以+10,我会的。最新版本的spring(4.1)使用jackson 2。
【解决方案3】:

JsonProcessingException 是 jackson-core-asl-x.x.x.jar 的一部分。确保它是您的类路径的一部分。

【讨论】:

  • 嗯,我可以看到它就在 jackson-core 包中,仍然出现异常
【解决方案4】:

为了补充 anshul tiwari 的答案,bean 标签应该放在 mvc:annotation-driver:

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean
            class="org.springframework.http.converter.ResourceHttpMessageConverter" />
        <!-- <bean -->
        <!-- class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" 
            /> -->
        <bean
            class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
        <!-- <bean -->
        <!-- class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" 
            /> -->
    </mvc:message-converters>
</mvc:annotation-driven>

【讨论】:

    【解决方案5】:

    像下面这样使用它:希望它会起作用..

    http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd" default-lazy-init="true">

    <context:component-scan base-package="com.vc.bmp.resource" />
    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <!-- property name="prefixJson" value="true" />
                <property name="supportedMediaTypes" value="application/json" /-->
                <property name="objectMapper">
                    <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                        <property name="serializationInclusion">
                            <value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value>
                        </property>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 2013-03-07
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      相关资源
      最近更新 更多