【发布时间】:2018-03-28 10:42:48
【问题描述】:
我在使用 @DateTimeFormat 注释转换实际不存在的日期时遇到问题。
例如,当我设置日期 15/10/2017 时,我的实体中的注释如下:
@Column(nullable = false)
@NotNull
@DateTimeFormat(pattern = "dd/MM/yyyy")
private Date dataVisita;
我收到错误:
Failed To Convert Property Value Of Type Java.Lang.String To Required Type Java.Util.Date For Property DataVisita;
Nested Exception Is Org.Springframework.Core.Convert.ConversionFailedException:
Failed To Convert From Type Java.Lang.String To Type @Javax.Persistence.Column @Javax.Validation.Constraints.NotNull @Org.Springframework.Format.Annotation.DateTimeFormat Java.Util.Date For Value 15/10/2017;
Nested Exception Is Java.Lang.IllegalArgumentException:
Cannot Parse "15/10/2017": Illegal Instant Due To Time Zone Offset Transition (America/Sao_Paulo)
我了解错误告诉我日期15/10/2017 00:00:00实际上并不存在,但我想转换为15/10/2017 01:00:00,这样就忽略了问题并找到了对应的日期。
有没有办法让我覆盖 @DateTimeFormat 注释或让格式化程序变得宽松?
【问题讨论】:
-
'言出必行,言出必行' 您当前正在尝试将日期放入表示日期和时间的对象中。你可以使用 LocalDate 还是你被 Date 卡住了?
-
您可以创建自定义反序列化器。 AFAIR 它在引擎盖下使用杰克逊。
JsonDeserialize注释应该会有所帮助。 Jackson-Deserialization example. -
尝试使用
@DateTimeFormat(iso=ISO.DATE_TIME),它不会忽略字符串中的时间
标签: java spring date formatter