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