为什么在 Spring Boot 中为 @DateTimeFormat 调用已弃用的 Date(String)?

问题描述

我有一个字段,他是从 MongoDB 中检索到的,如下所示:

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "dd-MMM-yyyy",lenient=OptBoolean.TRUE)
    private Date createDate;

它以以下格式存储为 String

createdDate: "2019-01-20 15:45:00"

但是当我尝试从数据库获取时,我不断收到以下错误

org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value '2019-01-20 15:45:00'; nested exception is java.lang.IllegalArgumentException
    at org.springframework.core.convert.support.ObjectToObjectConverter.convert(ObjectToObjectConverter.java:112)
    at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:41)
    at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:191)
....

Caused by: java.lang.IllegalArgumentException: null
    at java.base/java.util.Date.parse(Date.java:617)
    at java.base/java.util.Date.<init>(Date.java:275)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:64)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
    at org.springframework.core.convert.support.ObjectToObjectConverter.convert(ObjectToObjectConverter.java:108)

出现此错误的原因是正在调用名为 parse 的已弃用方法我可以使用以下方法复制相同的错误

public static void main(String[] args) throws Exception{
    
        Date date = new Date("2019-01-20 15:45:00");
        System.out.println(date); 
    } 

这给出了相同的 IllegalArgumentException

Exception in thread "main" java.lang.IllegalArgumentException
    at java.base/java.util.Date.parse(Date.java:617)
    at java.base/java.util.Date.<init>(Date.java:275)
    at com.tatadigital.product.DateTest.main(DateTest.java:15)

我想知道两件事:

  1. 为什么要调用已弃用的方法进行转换?这不是错误吗?
  2. 另外我该如何解决这个问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)