日期格式序列化問題
場景:使用avue的表單組件,插入數(shù)據(jù),選擇插入時間的時候報錯
JSON?parse?error:?Cannot?deserialize?value?of?type?`java.time.LocalDateTime`?from?String?"2023-02-10T07:00:49.000Z":?Failed?to?deserialize?java.time.LocalDateTime:?(java.time.format.DateTimeParseException)?Text?'2023-02-10T07:00:49.000Z'?could?not?be?parsed?at?index?10;?nested?exception?is?com.fasterxml.jackson.databind.exc.InvalidFormatException:?Cannot?deserialize?value?of?type?`java.time.LocalDateTime`?from?String?"2023-02-10T07:00:49.000Z":?Failed?to?deserialize?java.time.LocalDateTime:?(java.time.format.DateTimeParseException)?Text?'2023-02-10T07:00:49.000Z'?could?not?be?parsed?at?index?10?at?[Source:?(PushbackInputStream);?line:?1,?column:?78]?(through?reference?chain:?org.springblade.modules.demo.entity.Blog["time"])
這里報錯的大致意思是 localdatetime的數(shù)據(jù)類型生成的時間字符串是 2023-02-10T07:00:49.000Z 中間有個 T ,最后還有一個Z??不能被反序列化,那么解決思路有2個
讓時間生成的時候不帶 T?和 Z?
找轉(zhuǎn)換器能夠轉(zhuǎn)換這個時間格式
這里使用了第二個思路
引入依賴
環(huán)境:java8,mysql8,時間字段的數(shù)據(jù)類型是TIMESTAMP
說明:TIMESTAMP 和 DATETIME 的選擇不影響結(jié)果,我測試的結(jié)果是這樣的
解決方案:
實體類的 時間 字段上添加注解
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
//private LocalDateTime time;
備注 導(dǎo)包別導(dǎo)錯了