java - Jackson 无法反序列化日期

标签 java mysql rest jackson

在我的应用程序中,我添加了 REST。为了测试这些方法,我在数据库中创建了一些基本行。

当我尝试使用带有 ID 的 GET 来获取数据库中的特定行时,出现 jackson 异常。

com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.util.Date` from String "2019-03-11T10:14:14Z[UTC]": not a valid representation (error: Failed to parse Date value '2019-03-11T10:14:14Z[UTC]': Cannot parse date "2019-03-11T10:14:14Z[UTC]": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSSZ', parsing fails (leniency? null))

我尝试制作的对象有一个字段

@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date published;

被调用的构造函数是

public something(Date published) {
    this.published = published;
}

我在 StackOverflow 问题中读到我应该添加

@JsonType(pattern="")

在“已发布”字段上方,但我似乎找不到需要导入的内容才能使该注释发挥作用。

编辑: 感谢 SHAHAKASH 的回答,我终于成功添加了注释。

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = TimeZone.getDefault(), locale = Locale.getDefault())

但是我有两个问题,一个是它不允许我保留时区和区域设置。因此删除这些可以让我的程序运行

@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS")

这给了我错误:

Cannot deserialize value of type `java.util.Date` from String "2019-03-11T10:14:14Z[UTC]": expected format "yyyy-MM-dd'T'HH:mm:ss.SSS"

显然这意味着我的格式错误。我在找到正确的日期格式时遇到了很多麻烦。

最佳答案

尝试这个模式yyyy-MM-dd'T'HH:mm:ss'Z'

String testDate = "2019-03-11T10:14:14Z[UTC]";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date d = sdf.parse(testDate);
System.out.println(d);

输出:

Mon Mar 11 10:14:14 IST 2019

关于java - Jackson 无法反序列化日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55140339/

相关文章:

php - 如何添加到数据库中的现有值

javascript - 蒙戈错误: topology was destroyed(when finding the documents) and instance pool was destroyed (when inserting documents)

java - 选择打印线上的位置,java字符串

java - 当我使用完 SVNKit 的工作副本后,如何删除它?

java - MySQL 增量列和 DBunit 数据集的问题

mysql - 在 MySQL 中计算重叠

mysql - SQL 多重内连接

c# - 使用 RestSharp 轻松调用 Rest api

php - paypal sdk 'Class ' PayPal\Rest\ApiContext'未找到'

java - 使用 Java 流将对象列表拆分为多个字段值列表