将一套公司的N年前的老代码,原始到直接是jar放入lib搭建的项目。首先第一步把项目改成maven版本,然后再从spring3.1 升级到 spring5,直接跳过4版本,期间不断填坑,将一些我还有印象的记录下来。

因为是SSM的项目,在使用Tomcat启动时,报错如下

19-Oct-2020 14:34:35.109 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.ApplicationContext.log StandardWrapper.Throwable
    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.xxx.controller.IconController#0': Unsatisfied dependency expressed through field 'iconService'; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.http.converter.json.MappingJacksonHttpMessageConverter] for bean with name 'mappingJacksonHttpMessageConverter' defined in class path resource [springmvc/applicationContextMvc-front.xml]; nested exception is java.lang.ClassNotFoundException: org.springframework.http.converter.json.MappingJacksonHttpMessageConverter
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643)
        at

发现时MappingJacksonHttpMessageConverter的问题,这是因为spring3和spring5处理json的方式类不一致,实际上从spring4版本中就已经使用MappingJackson2HttpMessageConverter处理json了,这个配置和在接口方法上写@ResponseBody有关,该注解会将接口的返回值由ModelAndView转换为json字符串。而SSM框架中HttpMesssageConverter配置在xml中,所有编译的的过程中没有发现错误,在启动加载spring bean时,抛出异常。

所以只需要在对应是spring的配置文件中修改一下即可。

<!-- Json协议转换注解(@ResponseBody) -->
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐