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

jyr*_*and 13 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"/>
Run Code Online (Sandbox Code Playgroud)

我还下载了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
Run Code Online (Sandbox Code Playgroud)

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

小智 43

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

<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
Run Code Online (Sandbox Code Playgroud)

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


dem*_*lem 10

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

当杰克逊进入2.0版本时,核心库从jackson-core-asl-xxxjar变为jackson-core-xxxjar.有了这个,路径发生了变化.在版本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.


gou*_*uki 6

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