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不兼容(不同的包,不同的类等)。

您有两种可能的解决方案

  1. 不要使用Jackson2并将依赖项切换到Jackson1
  2. 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文档