Spring 4和Rest WS集成
我一直在为Spring4和RestWS集成做一个poc。 我是新手,只有几周的曝光。 我正在按照博客的说明进行操作。 据我所知,在Spring 4和restWS设置中,jackson-core / anotation / databind 2用于正确的JSON Java对象的消息转换。 org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
也将用于消息转换。 我满足了所有这些要求。 但是,当我尝试启动应用程序时,我得到bean创建exception。 堆
SEVERE:将上下文初始化事件发送到类org.springframework.web.context.ContextLoaderListener的侦听器实例的exception org.springframework.beans.factory.BeanCreationException:创建名为'regionController'的bean时出错:注入自动连接的依赖项失败; 嵌套exception是org.springframework.beans.factory.BeanCreationException:无法自动assembly字段:private org.springframework.web.servlet.View com.leggmason.lmpamfs.controllers.RegionController.jsonView_i; 嵌套exception是org.springframework.beans.factory.BeanCreationException:在ServletContext资源[/WEB-INF/applicationContext.xml]中定义的名称为'org.springframework.web.servlet.view.json.MappingJacksonJsonView#0'的bean创建错误: bean的实例化失败; 嵌套exception是org.springframework.beans.BeanInstantiationException:无法实例化bean类[org.springframework.web.servlet.view.json.MappingJacksonJsonView]:构造函数抛出exception; 嵌套exception是java.lang.NoClassDefFoundError:org / codehaus / jackson / map / ObjectMapper at 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) at 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) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703) at 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) at 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) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source) 在java.lang.Thread.run(未知来源) 引起:org.springframework.beans.factory.BeanCreationException:无法自动assembly字段:private org.springframework.web.servlet.View com.leggmason.lmpamfs.controllers.RegionController.jsonView_i; 嵌套exception是org.springframework.beans.factory.BeanCreationException:在ServletContext资源[/WEB-INF/applicationContext.xml]中定义的名称为'org.springframework.web.servlet.view.json.MappingJacksonJsonView#0'的bean创建错误: bean的实例化失败; 嵌套exception是org.springframework.beans.BeanInstantiationException:无法实例化bean类[org.springframework.web.servlet.view.json.MappingJacksonJsonView]:构造函数抛出exception; 嵌套exception是java.lang.NoClassDefFoundError:org / codehaus / jackson / map / ObjectMapper at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508) 在org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) ......还有22个 引起:org.springframework.beans.factory.BeanCreationException:在ServletContext资源[/WEB-INF/applicationContext.xml]中定义的名称为'org.springframework.web.servlet.view.json.MappingJacksonJsonView#0'的bean创建错误: bean的实例化失败; 嵌套exception是org.springframework.beans.BeanInstantiationException:无法实例化bean类[org.springframework.web.servlet.view.json.MappingJacksonJsonView]:构造函数抛出exception; 嵌套exception是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) at 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) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960) 在org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480) ......还有24个 引起:org.springframework.beans.BeanInstantiationException:无法实例化bean类[org.springframework.web.servlet.view.json.MappingJacksonJsonView]:构造函数抛出exception; 嵌套exception是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) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) 在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类出了问题。 可以跟随工厂文件造成麻烦吗?
我是否应该更换这门课程? 我会帮助解决这个问题。
谢谢,Suvojit
您当前正在使用MappingJacksonJsonView
,它可以与MappingJacksonJsonView
一起使用。
你提到以下内容:
我没有使用Jackson 1 api。 我的lib中的jars是jackson-core-2.0.2,jackson-annotation-2.3.0,jackson-bindings 2.3.0。
这意味着你的类路径上有Jackson2 。 Jackson1和Jackson2不兼容(不同的包,不同的类等)。
您有两种可能的解决方案
- 不要使用Jackson2并将依赖项切换到Jackson1
- 用
MappingJacksonJsonView
替换MappingJackson2JsonView
对于Spring4 Rest + Json POC以下App Context就足够了
确保你对jackson有依赖(例如在maven中)
com.fasterxml.jackson.core jackson-core 2.3.0 com.fasterxml.jackson.core jackson-databind 2.3.0
你不需要特别定义MappingJackson2JsonView; 当jackson是类路径时,将自动创建MappingJackson2HttpMessageConverter / MappingJacksonHttpMessageConverter(默认情况下,当ContentType / Accept为application / json时)。
Jackson1已被弃用,但如果出于任何原因您只限于Jackson1, 请参阅Spring 4文档