Spring MVC和JSON,Jackson类没有发现异常

时间:2012-02-07 00:38:23

标签: json spring-mvc jackson

我无法获得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文件有关。如果需要,我可以粘贴整个错误日志。

5 个答案:

答案 0 :(得分:43)

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

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

对于较旧的jackson版本,org.springframework.http.converter.json.MappingJacksonHttpMessageConverter没问题。确保将jar文件添加到项目库中。

答案 1 :(得分:10)

anshul tiwari的答案部分地解决了这个问题。这是一个更完整的答案......

当杰克逊进入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源代码需要导入正确路径的情况,开发人员无需做任何事情使用杰克逊2。

答案 2 :(得分:5)

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

答案 3 :(得分:1)

为了补充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>

答案 4 :(得分:0)

使用它如下:希望它能起作用..

http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd&#34;     默认延迟实例=&#34;真&#34;&GT;

<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>