“春季MVC”;找不到能够从java.lang.String类型转换为org.springframework.core.io.Resource类型的转换器;

“春季MVC”;找不到能够从java.lang.String类型转换为org.springframework.core.io.Resource类型的转换器;,java,spring,spring-mvc,type-conversion,Java,Spring,Spring Mvc,Type Conversion,我们有许多自定义的“org.springframework.core.convert.converter.converter”转换器,可以帮助我们自动将rest请求中的URL参数映射到域对象 今天,我们通过定义转换服务注册了这些转换器: <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <prope

我们有许多自定义的“org.springframework.core.convert.converter.converter”转换器,可以帮助我们自动将rest请求中的URL参数映射到域对象

今天,我们通过定义转换服务注册了这些转换器:

<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <!-- List of custom converter beans here -->
        </set>
    </property>
</bean>

然后使用以下方式进行注册:

<mvc:annotation-driven conversion-service="conversionService" />

但是,对于我们的每个定义,我们在启动时都会遇到以下异常:

org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.util.ArrayList<?> to type java.util.List<org.springframework.core.io.Resource> for value '[/WEB-INF/images/]'; nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type java.lang.String to type org.springframework.core.io.Resource
org.springframework.core.convert.conversionfailedeexception:无法将值“[/WEB-INF/images/]”的类型java.util.ArrayList转换为类型java.util.List;嵌套异常为org.springframework.core.convert.ConverterNotFoundException:未找到能够从java.lang.String类型转换为org.springframework.core.io.Resource类型的转换器
以前是否有人遇到/解决过此问题


我们使用的是spring 3.2.9。

结果是我没有正确读取堆栈跟踪上方的行。。。忽略了堆栈上方的行是“DEBUG”这一事实

简而言之,转换服务无法从字符串转换为资源;然而,spring依赖于它的基于PropertyEditor的转换,该转换成功了(我相信这就是通常进行字符串资源转换的方式)

我创建了一个示例项目,该项目将重新创建此调试异常:

完整堆栈的示例如下所示:

DEBUG: org.springframework.beans.TypeConverterDelegate - Original ConversionService attempt failed - ignored since PropertyEditor based conversion eventually succeeded
org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.util.ArrayList<?> to type java.util.List<org.springframework.core.io.Resource> for value '[/WEB-INF/css/]'; nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type java.lang.String to type org.springframework.core.io.Resource
    at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:41)
    at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:168)
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:161)
    at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:448)
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:494)
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:488)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1463)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1422)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1158)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:633)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:602)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:665)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:521)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:462)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    at javax.servlet.GenericServlet.init(GenericServlet.java:160)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5198)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5481)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:634)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:671)
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1840)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type java.lang.String to type org.springframework.core.io.Resource
    at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:276)
    at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:171)
    at org.springframework.core.convert.support.CollectionToCollectionConverter.convert(CollectionToCollectionConverter.java:83)
    at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:35)
    ... 40 more
DEBUG:org.springframework.beans.TypeConverterDelegate-原始转换服务尝试失败-被忽略,因为基于PropertyEditor的转换最终成功
org.springframework.core.convert.ConversionFailedException:无法将值“[/WEB-INF/css/]”的类型java.util.ArrayList转换为类型java.util.List;嵌套异常为org.springframework.core.convert.ConverterNotFoundException:未找到能够从java.lang.String类型转换为org.springframework.core.io.Resource类型的转换器
位于org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:41)
位于org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:168)
位于org.springframework.beans.TypeConverterDelegate.ConvertifRequired(TypeConverterDelegate.java:161)
在org.springframework.beans.BeanWrapperImpl.convertifRequired上(BeanWrapperImpl.java:448)
位于org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:494)
位于org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:488)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1463)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1422)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1158)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
位于org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
位于org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
位于org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
位于org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
位于org.springframework.beans.factory.support.DefaultListableBeanFactory.PreInstanceSingleton(DefaultListableBeanFactory.java:633)
位于org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
位于org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651)
位于org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:602)
位于org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:665)
位于org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:521)
位于org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:462)
位于org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
位于javax.servlet.GenericServlet.init(GenericServlet.java:160)
位于org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
位于org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
位于org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
位于org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5198)
位于org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5481)
位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
位于org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
位于org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
位于org.apache.catalina.core.StandardHost.addChild(StandardHost.java:634)
位于org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:671)
位于org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1840)
位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
在j
<logger name="org.springframework.beans.TypeConverterDelegate">
    <level value="error" />
</logger>
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="registerDefaultFormatters" value="false" />
    <property name="converters">
        <set>
            <bean class="com.example.controller.converter.CustomerStringToDateConverter"/>
        </set>
    </property>
</bean>

<mvc:annotation-driven conversion-service="conversionService"/>
<mvc:resources mapping="/js/**" location="/js/" cache-period="31556926"/>

DEBUG [RMI TCP Connection(3)-127.0.0.1] - Original ConversionService attempt failed - ignored since PropertyEditor based conversion eventually succeeded
org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.util.ArrayList<?> to type java.util.List<org.springframework.core.io.Resource> for value '[/js/]'; nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type java.util.ArrayList<?> to type org.springframework.core.io.Resource
<mvc:annotation-driven conversion-service="conversionService"/>