nested exception is java.lang.NoClassDefFoundError: Could not initialize class org.springframework.http.converter.json.MappingJackson2HttpMessageConverter

背景

在开发过程中配置如下信息:

<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包冲突,或者是版本不对。

原文地址:https://www.cnblogs.com/qingshan-tang/p/12397055.html