Cannot convert value of type [org.apache.shiro.cache.ehcache.EhCacheManager] to required type [org.

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xing930408/article/details/88075986

 在一个springmvc(spring是3.0版本,其对应的thyemleaf也应该是spring3的版本)项目中添加thyemleaf时候,出现这个错误,

 Cannot convert value of type [org.apache.shiro.cache.ehcache.EhCacheManager] to required type [org.thymeleaf.cache.ICacheManager] for property 'cacheManager': no matching editors or conversion strategy found

初看这个错误,从字面意思来看,感觉是对于cacheManager这个属性,没法将[org.apache.shiro.cache.ehcache.EhCacheManager]转换成[org.thymeleaf.cache.ICacheManager] for property 'cacheManager',

于是查看配置文件,发现cacheManager这个属性只有在配置shrio时候用到了 

    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="sessionManager" ref="sessionManager"/>
        <property name="authenticator" ref="authenticator"/>
        <property name="cacheManager" ref="cacheManager"/>
        <property name="realms">
            <array>
                <ref bean="ticketRealm"/>
            </array>
        </property>
    </bean>

    <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
        <property name="cacheManagerConfigFile" value="classpath:com/jdjr/ft/sso/api/ehcache/ehcache.xml"/>
    </bean>

 所以我猜测应该是thyemleaf中有个属性也叫cacheManager,由于在这里注册了bean,所以这个属性先去spring容器里面拿来用了,于是百度,终于找到了这篇文章https://blog.csdn.net/baokx/article/details/50470908,按照博主给的参考,给出了解决方法1,即直接把cacheManager拿到securityManager内部来,发现项目正常启动

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="sessionManager" ref="sessionManager"/>
        <property name="authenticator" ref="authenticator"/>
        <property name="cacheManager">
            <bean class="org.apache.shiro.cache.ehcache.EhCacheManager">
                <property name="cacheManagerConfigFile" value="classpath:com/jdjr/ft/sso/api/ehcache/ehcache.xml"/>
            </bean>
        </property>
        <property name="realms">
            <array>
                <ref bean="ticketRealm"/>
            </array>
        </property>
    </bean>

同时又在思考,之所以产生这个错误,是因为了引用了同一个bean,所以如果把bean的id改一下是否可以呢?经过验证确实可以,解决方法2

    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="sessionManager" ref="sessionManager"/>
        <property name="authenticator" ref="authenticator"/>
        <property name="cacheManager" ref="cacheManager1"/>
        <property name="realms">
            <array>
                <ref bean="ticketRealm"/>
            </array>
        </property>
    </bean>

    <bean id="cacheManager1" class="org.apache.shiro.cache.ehcache.EhCacheManager">
        <property name="cacheManagerConfigFile" value="classpa

 完整错误如下

java.lang.IllegalStateException: Cannot convert value of type [org.apache.shiro.cache.ehcache.EhCacheManager] to required type [org.thymeleaf.cache.ICacheManager] for property 'cacheManager': no matching editors or conversion strategy found
	org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:241)
	org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:470)
	org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:516)
	org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:510)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1406)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1365)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1118)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
	org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
	org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
	org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
	org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1360)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1118)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
	org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
	org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:400)
	org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1164)
	org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:275)
	org.springframework.web.servlet.DispatcherServlet.initViewResolvers(DispatcherServlet.java:665)
	org.springframework.web.servlet.DispatcherServlet.initStrategies(DispatcherServlet.java:445)
	org.springframework.web.servlet.DispatcherServlet.onRefresh(DispatcherServlet.java:430)
	org.springframework.web.servlet.FrameworkServlet.onApplicationEvent(FrameworkServlet.java:752)
	org.springframework.web.servlet.FrameworkServlet$ContextRefreshListener.onApplicationEvent(FrameworkServlet.java:989)
	org.springframework.web.servlet.FrameworkServlet$ContextRefreshListener.onApplicationEvent(FrameworkServlet.java:1)
	org.springframework.context.event.GenericApplicationListenerAdapter.onApplicationEvent(GenericApplicationListenerAdapter.java:51)
	org.springframework.context.event.SourceFilteringListener.onApplicationEventInternal(SourceFilteringListener.java:97)
	org.springframework.context.event.SourceFilteringListener.onApplicationEvent(SourceFilteringListener.java:68)
	org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:97)
	org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:324)
	org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:929)
	org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:467)
	org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631)
	org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588)
	org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645)
	org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508)
	org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449)
	org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133)
	javax.servlet.GenericServlet.init(GenericServlet.java:158)
	org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
	org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
	org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)
	org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
	org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2527)
	org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2516)
	java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	java.lang.Thread.run(Thread.java:748)

猜你喜欢

转载自blog.csdn.net/xing930408/article/details/88075986