当前位置: 首页 > 知识库问答 >
问题:

TypeMismatch.Target spring boot批拒绝值[2020-09-18T00:00:00+02:00]

慎建本
2023-03-14

我正在尝试将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错误字段“Target”中字段“Time”上的字段错误:拒绝值[2020-09-18T00:0000+02:00];代码[typeMismatch.target.time,typeMismatch.time,typeMismatch.java.sql.timestamp,typeMismatch];参数[org.springframework.context.support.defaultmessageSourceResolvable:代码[target.time,time];参数[];default message[time]];默认消息[无法将“java.lang.String”类型的属性值转换为属性“time”的必需类型“java.sql.timestamp”;嵌套异常为java.lang.IllegalStateException:无法将“java.lang.String”类型的值转换为属性“time”的必需类型“java.sql.timestamp”:找不到匹配的编辑器或转换策略]在

谢谢你的帮助

共有2个答案

翟俊远
2023-03-14

正如错误所说,您正在尝试将字符串值赋给一个即时变量。这意味着indprod.gettime()正在尝试成为字符串。

解决这个问题的一种方法是重新键入字符串返回到即时,这可能不是最好的解决方案,但应该是有效的。

Timestamp time = Timestamp.from(ZonedDateTime.parse(indProd.getTime()).toInstant());

indprod变量中将时间更改为字符串

麹繁
2023-03-14

从错误中可以看出,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扩展了java.util.datejava.util的日期-时间API及其格式API、SimpleDateFormat已过时且容易出错。我建议您应该完全停止使用它们,而切换到现代的日期时间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项目中使用ThreeTenABP。

 类似资料:
  • 本文向大家介绍解决Android 6.0获取wifi Mac地址为02:00:00:00:00:00问题,包括了解决Android 6.0获取wifi Mac地址为02:00:00:00:00:00问题的使用技巧和注意事项,需要的朋友参考一下 前言: 之前项目比较旧,手机版本还比较低,还使用eclipse开发。用到了需要获取手机wifi Mac地址。使用了如下代码: ▲ 产生问题 : 使用这个方法

  • 我需要将2000-11-10T00:00:00 02:00格式的字符串转换为LocalDateTime对象。但当我将这个字符串解析为LocalDateTime时,它会给出错误。 我应该使用哪种模式将字符串解析为LocalDateTime对象?

  • 我需要将2000-11-10T00:00:00 02:00格式的字符串转换为LocalDateTime对象。但当我将这个字符串解析为LocalDateTime时,它会给出错误。 我应该使用哪种模式将字符串解析为LocalDateTime对象?

  • 我有一个问题,在转换java.time.即时java.util.日期: 给出输出: 为什么日期时间是02:00:00?以及如何与时间00:00:00进行转换

  • 问题内容: 我最近接手了一个十年前创建的旧项目。它使用MySQL 5.1。 除其他外,我需要将默认字符集从latin1更改为utf8。 例如,我有这样的表: 我设置了自己的Mac来进行此工作。不用考虑太多,我运行了“ brew install mysql”,它安装了MySQL 5.7。所以我有一些版本冲突。 我下载了此数据库的副本并将其导入。 如果我尝试运行这样的查询: 我收到此错误: 我以为可以

  • 问题内容: 如何将字段的默认值设置为“ 0000-00-00 00:00:00”?如果我们不能使用“ 0000-00-00 00:00:00”作为默认值?什么是 基本 有效tiemdate? 例如,这是用于创建我的商品表的SQL, 运行此查询时出现此错误, 问题答案: 错误原因:SQL模式 您可以设置的默认值,或场特殊的“零”作为虚拟日期“0000-00-00”值,如果SQL模式允许它。对于低于5