背景
在开发过程中配置如下信息:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter" /> </list> </property> </bean> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name = "supportedMediaTypes"> <list> <bean class="org.springframework.http.MediaType"> <constructor-arg index="0" value="text"/> <constructor-arg index="1" value="plain"/> <constructor-arg index="2" value="UTF-8"/> </bean> <bean class="org.springframework.http.MediaType"> <constructor-arg index="0" value="*"/> <constructor-arg index="1" value="*"/> <constructor-arg index="2" value="UTF-8"/> </bean> <bean class="org.springframework.http.MediaType"> <constructor-arg index="0" value="text"/> <constructor-arg index="1" value="*"/> <constructor-arg index="2" value="UTF-8"/> </bean> <bean class="org.springframework.http.MediaType"> <constructor-arg index="0" value="application"/> <constructor-arg index="1" value="json"/> <constructor-arg index="2" value="UTF-8"/> </bean> </list> </property> </bean>
报错信息
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter‘: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: Could not initialize class org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
解决过程
在网络上搜索都说是spring版本与MappingJackson2HttpMessageConverter类不匹配,参考 。但是我检查我的项目中确实是使用的spring4.X版本,所以应该不是这个问题。
然后在搜索的时候意识到可能是某些jar包引用的版本不对。但是这个又不太好纠错到底哪个jar包问题。无意中发现这个博客中使用的jackson版本和我的不太一样,他用的是2.8.5,我用的是2.9.10.1 ,我的版本貌似太新了,于是死马当活马医试了一下,发现能正常启动了。
结论
1.首先要检查spring版本与MappingJackson2HttpMessageConverter是否匹配
2.尝试更换jackson版本。
3.一般包类找不到抛NoClassDefFoundError的异常,首先要考虑是否jar没有引用,jar包冲突,或者是版本不对。