无法将类型为`java.time.LocalDate`的值从字符串反序列化
无法将类型为`java.time.LocalDate`的值从字符串反序列化
由于以下异常,我无法反序列化Java-8-LocatDate:
JSON解析错误:无法将类型为java.time.LocalDate
的值从字符串“15/09/1978”反序列化:无法反序列化java.time.LocalDate(java.time.format .DateTimeParseException)在索引0处无法解析文本“15/09/1978”;
包含日期的JSON请求对象如下:
[
"employeeName" : "ABC XYZ",
"birthDate" : "15/09/1978"
]
我还尝试根据URLDeserialize Java 8 LocalDateTime with JacksonMapper实现日期反序列化。
然而,以下代码行
@DateTimeFormat(iso = DateTimeFormatter.ofPattern("dd/mm/yyyy"))导致以下编译错误
类型不匹配:无法从DateTimeFormatter转换为DateTimeFormat.ISO
在以下行中
private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="EMP_ID", updatable = false, nullable = false) private long empId; @Column(name="BIRTH_DATE") //以下行导致编译错误 ==> 类型不匹配:无法从DateTimeFormatter转换为DateTimeFormat.ISO @DateTimeFormat(iso = DateTimeFormatter.ofPattern("dd/mm/yyyy")) @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd/mm/yyyy") private LocalDate birthDate;
请帮我解决这个问题,提前感谢。
问题的原因是无法将类型为`java.time.LocalDate`的值从字符串反序列化。解决方法是将日期以毫秒的形式发送,并将该字符串转换为日期。
首先,创建一个名为`DateConverter`的类。在这个类中,有两个方法`getDate`和`getTimeinMilliseconds`。`getDate`方法将接收一个字符串参数`sessionDate`,将其转换为`Long`类型的毫秒数,并使用该毫秒数创建一个`Date`对象,最后返回该对象。`getTimeinMilliseconds`方法将接收一个字符串参数`myDate`,使用`SimpleDateFormat`将其转换为`Date`对象,然后获取该日期的毫秒数并返回。
接下来,在实体类`SessionDynamic`中,只需要定义一个`sessionDate`属性,类型为`Date`即可。
然后,使用`java.time`包下的`LocalDate`类来反序列化字符串为日期对象。在代码中,使用`DateTimeFormatter`类将字符串按照指定的格式解析为`LocalDate`对象。
最后,将解析后的`LocalDate`对象赋值给`sessionDate`属性即可完成反序列化操作。
希望这能帮到你:)