背景
在開發過程中配置如下信息:
<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包沖突,或者是版本不對。