欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

maven快速入门番外篇——使用maven整合SSH报错:java.lang.IllegalStateException: Cannot convert value of type...

程序员文章站 2022-03-26 22:34:05
...

问题描述

今天我使用maven整合SSH时,创建了一个如下结构的聚合工程。
maven快速入门番外篇——使用maven整合SSH报错:java.lang.IllegalStateException: Cannot convert value of type...
从上图可以看出,我的项目结构是一个父工程与多个子工程。其中,crm-web子工程依赖于crm-service子工程,crm-service子工程又依赖于crm-dao子工程。当所有子工程的代码开发好之后,通过crm-web子工程的pom.xml文件中配置的tomcat7插件来运行crm-web子工程时,该子工程确实是部署到tomcat服务器上去了,并成功运行起来了,如下图所示。
maven快速入门番外篇——使用maven整合SSH报错:java.lang.IllegalStateException: Cannot convert value of type...
但是,通过Google Chrome浏览器访问http://localhost:8080/crm/customer_list这样的url地址时,给我报错了,错误提示信息如下图所示。
maven快速入门番外篇——使用maven整合SSH报错:java.lang.IllegalStateException: Cannot convert value of type...
下面是更精准的错误提示信息。仔细看看,你知道出错的根本原因了吗?

java.lang.IllegalStateException: Cannot convert value of type [com.sun.proxy.$Proxy51 implementing com.meimeixia.crm.service.ICustomerService,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.meimeixia.crm.service.impl.CustomerService] for property 'customerService': no matching editors or conversion strategy found
	org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:302)
	org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:576)
	org.springframework.beans.AbstractNestablePropertyAccessor.convertForProperty(AbstractNestablePropertyAccessor.java:603)
	org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:204)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1527)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1486)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1226)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
	org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1048)
	com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:161)
	com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:178)
	com.opensymphony.xwork2.factory.DefaultActionFactory.buildAction(DefaultActionFactory.java:22)
	com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:148)
	com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:295)
	com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:395)
	com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:194)
	org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
	org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:37)
	com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
	org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:554)
	org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)
	org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)

出错原因

根据上面详细的错误提示信息可知,报错的根本原因就是Spring在转换时,主要是将代理类转换成接口,而不能转换成实际类。

解决办法

在使用Spring进行aop开发的时候,需要设置proxy-target-class这个属性的值,以决定是基于接口还是类被代理,若proxy-target-class属性的值为true,则表示是基于类被代理。

所以,要想解决这个问题,我们需要在crm-service子模块的applicationContext-service.xml配置文件中配置aop时,注明可以基于类被代理,即在<aop:cnfig>标签上添加proxy-target-class="true"
maven快速入门番外篇——使用maven整合SSH报错:java.lang.IllegalStateException: Cannot convert value of type...