【问题标题】:Spring 4 and Rest WS integrationSpring 4 和 Rest WS 集成
【发布时间】:2026-01-01 21:25:03
【问题描述】:
我一直在做关于 Spring4 和 RestWS 集成的 poc。我对这两者都是新手,接触不到一周。我正在按照博客的说明进行操作。我知道在 Spring 4 和 restWS 设置中,jackson-core/anotation/databind 2 将用于 JSON Java 对象的正确消息转换。 org.springframework.http.converter.json.MappingJackson2HttpMessageConverter 也用于消息转换。
我满足了所有这些要求。但是,当我尝试启动应用程序时,我得到 bean 创建异常。
堆栈
严重:向 org.springframework.web.context.ContextLoaderListener 类的侦听器实例发送上下文初始化事件的异常
org.springframework.beans.factory.BeanCreationException:创建名为“regionController”的bean时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有 org.springframework.web.servlet.View com.leggmason.lmpamfs.controllers.RegionController.jsonView_i;嵌套异常是 org.springframework.beans.factory.BeanCreationException:在 ServletContext 资源 [/WEB-INF/applicationContext.xml] 中定义名称为“org.springframework.web.servlet.view.json.MappingJacksonJsonView#0”的 bean 创建错误: bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.web.servlet.view.json.MappingJacksonJsonView]:构造函数抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: org/codehaus/jackson/map/ObjectMapper
在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703)
在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
在 org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4961)
在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5455)
在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
在 java.util.concurrent.FutureTask.run(未知来源)
在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源)
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源)
在 java.lang.Thread.run(未知来源)
引起:org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有 org.springframework.web.servlet.View com.leggmason.lmpamfs.controllers.RegionController.jsonView_i;嵌套异常是 org.springframework.beans.factory.BeanCreationException:在 ServletContext 资源 [/WEB-INF/applicationContext.xml] 中定义名称为“org.springframework.web.servlet.view.json.MappingJacksonJsonView#0”的 bean 创建错误: bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.web.servlet.view.json.MappingJacksonJsonView]:构造函数抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: org/codehaus/jackson/map/ObjectMapper
在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508)
在 org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)
... 22 更多
原因:org.springframework.beans.factory.BeanCreationException:创建名称为 'org.springframework.web.servlet.view.json.MappingJacksonJsonView#0' 在 ServletContext 资源 [/WEB-INF/applicationContext.xml] 中定义的 bean 时出错: bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.web.servlet.view.json.MappingJacksonJsonView]:构造函数抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: org/codehaus/jackson/map/ObjectMapper
在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1076)
在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1021)
在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
在 org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1017)
在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960)
在 org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858)
在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)
... 24 更多
引起:org.springframework.beans.BeanInstantiationException:无法实例化bean类[org.springframework.web.servlet.view.json.MappingJacksonJsonView]:构造函数抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: org/codehaus/jackson/map/ObjectMapper
在 org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:164)
在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1069)
... 35 更多
引起:java.lang.NoClassDefFoundError: org/codehaus/jackson/map/ObjectMapper
在 org.springframework.web.servlet.view.json.MappingJacksonJsonView.(MappingJacksonJsonView.java:65)
在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
在 sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源)
在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知来源)
在 java.lang.reflect.Constructor.newInstance(未知来源)
在 org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
... 37 更多
引起:java.lang.ClassNotFoundException:org.codehaus.jackson.map.ObjectMapper
在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
... 43 更多
MappingJacksonJsonView 类似乎有问题。
从工厂文件中遵循可能会导致麻烦吗?
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
<property name="contentType" value="text/plain"/>
</bean>
我也应该替换这个类吗?
我会帮助解决这个问题。
谢谢,
苏沃吉特
【问题讨论】:
-
您是否有理由不让 Spring Boot 为您完成所有这些工作?
-
对不起,我不知道 SpringBoot。正如我所说,我是一个新手。我只是按照可用的在线教程开始学习。
-
尝试改用 Spring Boot。它负责大多数常用设置,例如 JSON 映射,因此您可以开始编写控制器而不是设置。
-
啊,我注意到您使用的是旧的 (Jackson 1) 映射器类,所以可能是您的版本不匹配。
-
查看我的评论。您正在使用 jackson1 类 MappingJacksonJsonView,但应该使用 MappingJackson2JsonView。
标签:
java
json
spring
rest
spring-4