无法将类型为`java.time.LocalDate`的值从字符串反序列化

24 浏览
0 Comments

无法将类型为`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;

请帮我解决这个问题,提前感谢。

0
0 Comments

问题的原因是无法将类型为`java.time.LocalDate`的值从字符串反序列化。解决方法是将日期以毫秒的形式发送,并将该字符串转换为日期。

首先,创建一个名为`DateConverter`的类。在这个类中,有两个方法`getDate`和`getTimeinMilliseconds`。`getDate`方法将接收一个字符串参数`sessionDate`,将其转换为`Long`类型的毫秒数,并使用该毫秒数创建一个`Date`对象,最后返回该对象。`getTimeinMilliseconds`方法将接收一个字符串参数`myDate`,使用`SimpleDateFormat`将其转换为`Date`对象,然后获取该日期的毫秒数并返回。

接下来,在实体类`SessionDynamic`中,只需要定义一个`sessionDate`属性,类型为`Date`即可。

然后,使用`java.time`包下的`LocalDate`类来反序列化字符串为日期对象。在代码中,使用`DateTimeFormatter`类将字符串按照指定的格式解析为`LocalDate`对象。

最后,将解析后的`LocalDate`对象赋值给`sessionDate`属性即可完成反序列化操作。

希望这能帮到你:)

0