在Itellij idea中新建了webapp服务端项目后,引入了springmvc,客户端和服务端传递的数据类型定为json格式。然后在springmvc的配置文件(我的文件名为servlet-context.xml)中添加如下配置:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html; charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html; charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
注:必须添加在 <mvc:annotation-driven/> 之前。
然后在引入jackson的maven依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.5</version>
<type>bundle</type>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.5</version>
<type>bundle</type>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.0</version>
<type>bundle</type>
</dependency>
添加之后,启动服务端。然后就一直报错,下面为错误信息(截取了部分),主要就是jackson初始化所需的类找不到。
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.JavaType
org.springframework.web.context.support.XmlWebApplicationContext.refresh Exception encountered during context initialization - cancelling refresh attempt
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#0' defined in class path resource [servlet-context.xml]: Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/JavaType
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)...
Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/JavaType
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.getDeclaredMethods(Class.java:1975)...
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.JavaType
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167)
... 82 more
在网上搜索了各种答案,尝试了各种方法,均不见效,最后我从最开始检查,看看jar包是否导入了,是否成功编译了之类的。最后发现在External Library中成功引入了maven依赖,但是在WEB-INF的libs里面并没有生成jar包(难怪找不到。。。)
解决方案:打开了项目的Project Stucture,你会发现lib中缺少jackson的三个jar包,而右侧的Available Elements中有jackson的三个maven依赖。然后进行如下操作:选中lib点击上面的添加按钮“+”(或者右键选中添加),选择添加Library Files,选择jackson的三个依赖,点击“OK”按钮。执行完成后你会发现lib中有了jackson的三个jar包,而右侧的Available Elements中没有依赖了。
至此就大功告成了。是不是so easy! 然后我却在这里困了好久,试了各种方法。都去看了jackson的初始化源码。最后问题却出在这儿。所有有时候出现问题的地方可能是你没在意的位置。所有当出现问题时,要顺藤摸瓜,有时候找不到问题所在时就从最初的地方开始检查,也许有意外的收获哟~