我正在尝试处理其中某些字段为格式日期的CSV文件"yyyy-MM- dd"
-但当读者尝试将String从CSV文件转换为我的模型类中的Date时,阅读器失败。
错误是:
org.springframework.validation.BindException:org.springframework.validation.BeanPropertyBindingResult:1错误字段’datetimeInactive’中的对象’target’中的字段错误:拒绝的值[2011-04-27];
代码[typeMismatch.target.datetimeInactive,typeMismatch.datetimeInactive,typeMismatch.java.util.Date,typeMismatch];参数[org.springframework.context.support.DefaultMessageSourceResolvable:代码[target.datetimeInactive,datetimeInactive];
参数[];
默认消息[datetimeInactive];默认消息[未能将属性’datetimeInactive’的’java.lang.String’类型的属性值转换为所需的’java.util.Date’类型;嵌套的异常是java.lang.IllegalStateException:无法将[java.lang.String]类型的值转换为所需的[java.util。类型。
读者的XML:
http://code.google.com/p/springbatch-in-
action/source/browse/trunk/sbia/ch07/src/test/resources/com/manning/sbia/ch07/test-
batch-reader-context。 xml?r = 145
在我的XML配置文件中,我有以下bean:
<bean id="dateEditor" class="org.springframework.beans.propertyeditors.CustomDateEditor">
<constructor-arg>
<bean class="java.text.SimpleDateFormat">
<constructor-arg value="yyyy-MM-dd" />
</bean>
</constructor-arg>
<constructor-arg value="true" />
</bean>
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.util.Date">
<ref local="dateEditor" />
</entry>
</map>
</property>
</bean>
我的问题是:
我CustomDateEditor
在上下文中定义了一个-为什么Spring不能将String转换为Date?
我已经读到Spring 3(Converter
?)中有一种更新的方法可以完成转换。即http://forum.springsource.org/showthread.php?108480-Register-TypeConverter-PropertyEditor-w-Spring-Batch-但是,我在Spring Batch文档中找不到任何示例代码。您能在这里展示如何做/为我指出一些链接吗?
更新:
我对问题2有一个答案:
XML:
<mvc:annotation-driven conversion-service="conversionService" />
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="my.project.StringToDate">
<!-- org.springframework.binding.convert.converters.StringToDate DEFAULT_PATTERN = "yyyy-MM-dd" -->
<property name="pattern" value="yyyy-MM-dd" />
</bean>
</set>
</property>
</bean>
自定义转换器:
package my.project;
import java.util.Date;
import org.springframework.core.convert.converter.Converter;
public class StringToDate extends org.springframework.binding.convert.converters.StringToDate implements Converter<String, Date> {
public Date convert(String source) {
Date date = null;
try {
date = (Date) convertSourceToTargetClass(getPattern(), getTargetClass());
} catch (Exception e) {
}
return date;
}
}
我仍在寻找问题#1的答案。即,设置转换器后,批处理任务期间我仍然收到BindException。从这个论坛线程来看,我的代码似乎应该执行了转换。
堆栈跟踪为:
Caused by: org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 2 errors
Field error in object 'target' on field 'datetimeInactive': rejected value [2011-04-27]; codes [typeMismatch.target.datetimeInactive,typeMismatch.datetimeInactive,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [target.datetimeInactive,datetimeInactive]; arguments []; default message [datetimeInactive]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'datetimeInactive'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.util.Date] for property 'datetimeInactive': no matching editors or conversion strategy found]
Field error in object 'target' on field 'datetimeActive': rejected value [2011-04-27]; codes [typeMismatch.target.datetimeActive,typeMismatch.datetimeActive,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [target.datetimeActive,datetimeActive]; arguments []; default message [datetimeActive]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'datetimeActive'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.util.Date] for property 'datetimeActive': no matching editors or conversion strategy found]
at org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper.mapFieldSet(BeanWrapperFieldSetMapper.java:186)
at org.springframework.batch.item.file.mapping.DefaultLineMapper.mapLine(DefaultLineMapper.java:42)
at org.springframework.batch.item.file.FlatFileItemReader.doRead(FlatFileItemReader.java:179)
... 45 more
您的论坛参考用于在构建应用程序上下文和配置Bean时进行类型转换
看看BeanWrapperFieldSetMapper的JavaDoc
为了自定义将FieldSet值转换为所需类型以注入原型的方式,有几种选择。您可以 直接通过customEditors * 属性 * 注入PropertyEditor实例
,或者可以重写createBinder(Object)和initBinder(DataBinder)方法,或者可以提供自定义FieldSet实现。
意味着您应该将CustomDateEditor直接注入Mapper中
问题内容: 我想将“ 2014-07-15 06:55:14.198000 + 00:00”此字符串日期转换为Swift中的NSDate。 问题答案: 试试这个: 要进行进一步查询,请分别检查 Foundation 框架的Objective- C和Swift的NSDateFormatter和DateFormatter类。 __ Swift 3及更高版本(包括Swift 4)
我正在做一个应用程序,使用API提供数据与时间戳。时间戳如下所示: 如何将这种格式的日期(Tue Jul 13 00:00:00 CEST 2010)转换为Java日期(字符串来自alfresco属性) 用java将字符串转换为日期
问题内容: 您能帮忙在下面的Angularjs中进行转换吗?我的值是“ 20141023”,想在AngularJS中转换为日期,然后以dd / MMM / yyyy格式显示View非常感谢N。 问题答案: 您可以使用正则表达式,请参见下面的演示
问题内容: 我学得很快,并且对将日期String转换为NSDate转换为string感到震惊。我正在以以下格式获取日期字符串:“2015年10月22日星期四07:45:17 +0000”。我需要以MM-dd-yyyy格式显示日期。我尝试了以下代码,但返回“ null”。 谁能帮忙哪里出问题了?期待帮助。提前致谢。 问题答案: 首先,您需要使用其格式将字符串转换为NSDate。然后,将更改为简单格式
问题内容: 是否可以将“ 20110210”转换为2011-02-10? 我试过,我得到 我究竟做错了什么? 我有新的SimpleDateFormat(“ yyyy-MM-dd”)而不是新的SimpleDateFormat(“ yyyyMMdd”) 问题答案: 这对我有用,不会引发异常:
我正在尝试转换一个表示存储在SQLite中的日期的字符串。 日期存储到sqlite中,如下所示: 根据Java文档,方法: 返回此日期的字符串表示形式。格式设置相当于使用具有格式字符串“eee MMM dd hh:mm:ss zzz yyyy”的SimpleDateFormat,看起来类似于“tue Jun 22 13:07:00 PDT 1999”。则使用当前默认时区和区域设置。如果需要控制时区