我找到了有关如何使用 Spring 3 创建自定义类型转换器的文档,但是我找不到在 Grails 中注册转换器以便bindData
可以使用它的任何示例。
我尝试将此配置添加到 conf/spring/resources.groovy 文件中:
conversionService(org.springframework.context.support.ConversionServiceFactoryBean) {
converters {
com.initech.reports.tps.StringToFooConverter
}
}
这最终会踩到一些东西,因为一旦我添加转换器,我就会在启动时得到一个堆栈跟踪,如下所示:
2012-06-21 10:09:50,614 [main] 错误 context.GrailsContextLoader - 执行引导程序时出错:创建名称为“FooApprovers”的 bean 时出错:无法创建 [org.springframework.xml. xsd.commons.CommonsXsdSchemaCollection] 同时设置 bean 属性'schemaCollection';嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名称为 '(inner bean)#7' 的 bean 时出错:bean 的初始化失败;嵌套异常是 org.springframework.beans.TypeMismatchException:无法将类型“java.lang.String[]”的属性值转换为属性“xsds”所需的类型“org.springframework.core.io.Resource[]”;嵌套异常是 org.springframework.core.convert.ConversionFailedException:无法将值“{/WEB-INF/ws/FooApproversService.xsd}”从“java.lang.String[]”类型转换为“org.springframework.core.io.Resource[]”类型;嵌套异常是 org.springframework.core.convert.ConverterNotFoundException:找不到能够从“java.lang.String”转换为“org.springframework.core.io.Resource”的转换器 org.springframework.beans.factory.BeanCreationException:错误创建名为“FooApprovers”的bean:在设置bean属性“schemaCollection”时无法创建[org.springframework.xml.xsd.commons.CommonsXsdSchemaCollection]类型的内部bean“(内部bean)”;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名称为 '(inner bean)#7' 的 bean 时出错:bean 的初始化失败;嵌套异常是 org.springframework.beans.TypeMismatchException:无法将类型“java.lang.String[]”的属性值转换为属性“xsds”所需的类型“org.springframework.core.io.Resource[]”;嵌套异常是 org.springframework.core.convert.ConversionFailedException: Unable to convert value "{/WEB-INF/ws/FooApproversService.xsd}" from type 'java.lang.String[]' to type 'org.springframework.core .io.Resource[]'; 嵌套异常是 org.springframework.core.convert.ConverterNotFoundException:在 org.grails.tomcat.TomcatServer.start( TomcatServer.groovy:212) 在 grails.web.container.EmbeddableServer$start。
我正在使用 Grails 1.3.7(包括 Spring 3.0.5)。
所以显然还有其他一些类型转换器被添加的方式,我通过显式配置转换服务搞砸了?有没有办法在不踩其他转换器的情况下注册自定义类型转换器?