微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么在 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 举报,一经查实,本站将立刻删除。