我正在尝试使用批处理将csv文件中的数据与spring boot集成,日期字段有问题,因为无论使用何种类型,它都会被不断拒绝,下面是我的代码:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String service;
private Timestamp time;
@Override
public IndProd process(final IndProd indProd) throws Exception {
String service = indProd.getService();
Timestamp time = indProd.getTime();
Long nbAppels = indProd.getNbAppels();
Integer tempsDeReponseMoyenMillisecondes = indProd.getTempsDeReponseMoyenMillisecondes();
Long volume = indProd.getVolume();
BigDecimal tempsDeReponseMoyenSecondes = indProd.getTempsDeReponseMoyenSecondes();
IndProd transformedIndProd = new IndProd(service,time,nbAppels,tempsDeReponseMoyenMillisecondes,volume,tempsDeReponseMoyenSecondes);
return transformedIndProd;
}
返回的错误如下:
原因:org.springframework.validation.bindexception:org.springframework.validation.beanpropertybindingresult:1 errors字段“time”上的对象“target”中出现错误:拒绝值[2020-09-18t00:00:00+02:00];代码[typemismatch.target.time,typemismatch.time,typemismatch.java.sql.timestamp,typemismatch];参数[org.springframework.context.support.defaultmessagesourceresolvable:代码[target.time,time];参数[];默认消息[时间]];默认消息[未能将类型为'java.lang.string'的属性值转换为属性'time'所需的类型'java.sql.timestamp';嵌套异常为java.lang.illegalstateexception:无法将类型为“java.lang.string”的值转换为属性“time”所需的类型“java.sql.timestamp”:在org.springframework.batch.item.file.mapping.beanwrapperfieldsetmapper.mapfieldset(beanwrapperfieldsetmapper)中找不到匹配的编辑器或转换策略。java:201) ~[spring-batch-infrastructure-4.2.4.release。jar:4.2.4.release]在org.springframework.batch.item.file.mapping.defaultlinemapper.mapline(defaultlinemapper。java:43)~[spring-batch-infrastructure-4.2.4.release。jar:4.2.4.release]在org.springframework.batch.item.file.flatfileitemreader.doread(flatfileitemreader。java:185) ~[spring-batch-infrastructure-4.2.4.release。jar:4.2.4.release] ... 省略56个公共框架
谢谢你的帮助
2条答案
按热度按时间ui7jx7zq1#
正如错误所说,您正试图将一个字符串值赋给一个即时变量。那是什么意思
indProd.getTime()
试图成为一根弦。解决这个问题的一种方法是将字符串重新输入到instant,这也许不是最好的解决方案,但应该可以。
而且在
IndProd
字符串的变量更改时间v8wbuo2f2#
从错误来看,很明显
indProd.getTime()
返回一个String
试图分配给Timestamp
变量。假设indProd.getTime()
返回格式为的日期时间字符串,yyyy-MM-dd'T'HH:mm:ssXXX
例如2020-09-18T00:00:00+02:00
(如题名所述),你应该具有
注:
java.sql.Timestamp
延伸java.util.Date
以及api的日期时间java.util
以及它们的格式化api,SimpleDateFormat
过时且容易出错。我建议您完全停止使用它们,转而使用现代的日期时间api。使用现代日期时间api:
并将示例成员声明为
在trail:date-time了解有关现代日期时间api的更多信息。如果您正在为一个android项目工作,并且您的android api级别仍然不符合java-8,请检查通过desugaring提供的java8+api以及如何在android项目中使用threetenabp。