无法从字符串中反序列化“java.time.LocalDate”类型的值[重复]

Posted

技术标签:

【中文标题】无法从字符串中反序列化“java.time.LocalDate”类型的值[重复]【英文标题】:Unable deserialize value of type `java.time.LocalDate` from String [duplicate] 【发布时间】:2019-11-24 04:01:37 【问题描述】:

由于以下异常,我无法反序列化 Java-8-LocatDate

JSON 解析错误:无法从字符串“15/09/1978”反序列化类型为 java.time.LocalDate 的值:无法反序列化 java.time.LocalDate (java.time.format .DateTimeParseException) 文本“15/09/1978”无法在索引 0 处解析;

包含Date的JSON请求对象如下

[ "employeeName" : "ABC XYZ", “出生日期”:“1978 年 9 月 15 日” ]

我还尝试通过引用 URL Deserialize 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")
//below line gave compilation error ==> Type mismatch: cannot convert from DateTimeFormatter to DateTimeFormat.ISO
@DateTimeFormat(iso = DateTimeFormatter.ofPattern("dd/mm/yyyy"))
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd/mm/yyyy")
private LocalDate birthDate;

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

【问题讨论】:

Convert LocalDate in DD/MM/YYYY LocalDate 的可能重复项。或者也许只是某种相关。 你查看jackson-modules-java8了吗? 【参考方案1】:

我的建议是:

以毫秒为单位发送日期,并以毫秒为单位更改该字符串。

public class DateConverter 

    public static Date getDate(String sessionDate) 
        Long sessionOnDate = Long.parseLong(sessionDate);
        Date date = new Date(sessionOnDate);
        return date;
    

    public static Long getTimeinMilliseconds(String myDate) throws ParseException 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Date date = sdf.parse(myDate);
        long millis = date.getTime();
        return millis;
    


在实体中你可以简单地拥有:

public class SessionDynamic

private Date sessionDate;

让我知道:)

【讨论】:

请不要教年轻人使用早已过时且臭名昭著的SimpleDateFormat类。至少不是第一选择。而且不是没有任何保留。今天我们在java.time, the modern Java date and time API, 和它的DateTimeFormatter 中做得更好。 当然:) 我会保留这个并用新的编辑@OleV.V. 更新答案 我用过 - @DateTimeFormat(pattern = "DD/MM/YYYY")。我对现代 Java 日期和时间 API java.time 知之甚少。我也想使用@dateTimeFormat 反序列化字符串中的值java.time.LocalDate。请帮忙

以上是关于无法从字符串中反序列化“java.time.LocalDate”类型的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法从 VALUE_STRING 令牌中反序列化 java.lang.String[] 的实例

无法在 C# 中反序列化 JSON 结果。输入字符串格式不正确错误

无法从 START_OBJECT 令牌中反序列化 int[] 的实例

无法从 START_ARRAY 令牌中反序列化 Object 的实例

无法读取文档:无法从 START_OBJECT 令牌中反序列化 java.lang.String 的实例

无法从 START_OBJECT 令牌中反序列化 `java.lang.Boolean` 的实例