我正在尝试使用批处理从Spring Boot集成CSV文件中的数据,我对日期字段有问题,因为无论使用哪种类型,它都会不断被拒绝,这是我的代码:
@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错误字段“时间”上的对象“目标”中的字段错误:拒绝的值[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”的值转换为所需的类型“ java.sql.Timestamp”:
谢谢你的帮助
从错误中可以清楚地看出,它indProd.getTime()
返回了String
您试图分配给Timestamp
变量的值。假设indProd.getTime()
返回格式为日期-时间的字符串,yyyy-MM-dd'T'HH:mm:ssXXX
例如2020-09-18T00:00:00+02:00
(如问题标题中所述),则应替换
Timestamp time = indProd.getTime();
与
Timestamp time = new Timestamp(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX").parse(indProd.getTime()).getTime());
注意: java.sql.Timestamp
extendsjava.util.Date
的date-time APIjava.util
及其格式APISimpleDateFormat
已经过时且容易出错。我建议您应该完全停止使用它们,并切换到现代的date-time API。
使用现代的日期时间API:
OffsetDateTime odt = OffsetDateTime.parse(indProd.getTime());
//...
IndProd transformedIndProd = new IndProd(service,odt,nbAppels,tempsDeReponseMoyenMillisecondes,volume,tempsDeReponseMoyenSecondes);
并将实例成员声明为
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String service;
private OffsetDateTime odt;// Change the type to OffsetDateTime
在Trail:Date Time上了解有关现代日期时间API的更多信息。如果您正在为Android项目工作,并且您的Android API级别仍不兼容Java-8,请检查可通过desugaring获得的Java 8+ API和如何在Android Project中使用ThreeTenABP。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句