使用 Jackson 序列化 Date

2025年3月17日 | 阅读11分钟

在 Java 中,Date 是最重要的数据类型之一。当我们使用 REST API 时,我们需要序列化 Date。在本节中,我们将了解如何使用 Jackson 序列化 Date。我们将了解如何序列化以下类型的日期

  1. util.Date
  2. Joda-Time
  3. Java 8 DateTime

让我们一个一个地来理解它们

将 Date 序列化为时间戳

为了序列化 "java.util.Date",我们借助 Event 类。我们首先使用 SimpleDateFormat 类创建一个日期。之后,我们使用 date 字段创建一个 Event 的实例。现在,我们使用 ObjectMapper 类序列化 Event 实例。

让我们实现上述理论的代码

SerializeDateToTimestamp.java

输出

Serialize Date by using Jackson

将 Date 序列化为 ISO-86o1

就像将 Date 序列化为时间戳一样,我们也可以使用 ObjectMapper 类将 Date 序列化为 ISO-86o1。我们使用 ObjectMapper 类的 setDateFormat() 方法将 Date 序列化为 ISO-86o1。

让我们看一个例子来了解如何使用 ObjectMapper 类进行序列化

SerializeDateToISO.java

输出

Serialize Date by using Jackson

配置 ObjectMapper DateFormat

之前的所有 Date 序列化方法仍然缺乏选择表示 java.util.Date 实例的确切格式的完整灵活性。现在,我们执行一些配置,允许我们设置表示日期的格式。

让我们看一个例子来配置 ObjectMapper,允许我们设置 Date 格式。

SerializeDateWithConfiguration.java

输出

Serialize Date by using Jackson

使用 @JsonFormat 序列化 Date

我们还可以使用 @JsonFormat 注解序列化 Date。我们使用注解来控制各个类上的 Date 格式。因此,当我们不想全局控制日期格式时,我们使用注解。

让我们看一个例子来了解如何使用注解来控制 Date 格式。

SerializeDateWithJsonFormat.java

输出

Serialize Date by using Jackson

使用自定义 Date 序列化器序列化 Date

这是序列化 Date 字段的另一种方式。我们定义自定义的 date 序列化器,然后将其与 @JsonSerialize 一起使用。

让我们首先定义 Date 序列化器,然后我们举一个例子,在其中使用我们的自定义 date 序列化器。

CustomDateSerializer.java

输出

Serialize Date by using Jackson

使用 Jackson 序列化 Joda-Time

"java.util.Date" 不是唯一提供 Date 实例的类。日期也可以由其他类表示,例如 Joda-Time 等。DateTime 是 Joda-Time 库中最常见的实现之一。

为了使用 Joda-Time,我们在 POM.xml 文件中添加以下依赖项

要序列化 Joda-Time,我们只需将 JodaModule 注册到 ObjectMapper 类

SerializeJodaTimeExample.java

输出

Serialize Date by using Jackson

使用自定义序列化器序列化 Joda-Time

就像 "java.util.Date" 一样,我们也可以使用 DateTime 序列化器序列化 Joda-Time。让我们首先创建自定义 DateTime 序列化器,然后我们将使用它来序列化 Joda-DateTime。

CustomDateTimeSerializer.java

SerializeJodaTimeWithSerializer.java

输出

Serialize Date by using Jackson

使用 Jackson 序列化 Java 8 Date

就像 java.util.DateJoda-DateTime 一样,我们也可以使用 Jackson 序列化 Java 8 Date。我们将使用 LocalDateTime 进行序列化,为此,我们在 POM.xml 文件中添加以下依赖项。

为了序列化 Java 8 Date,我们将 JavaTimeModule 注册到 ObjectMapper 类。

让我们看一个例子来了解如何使用 Jackson 完成 Java 8 Date 的序列化。

SerializeJava8DateExample.java

输出

Serialize Date by using Jackson

使用自定义序列化器序列化 Java 8 Date

我们还可以使用自定义 LocalDateTime 序列化器序列化 Java 8 Date。就像 java.util.Date 和 Joda-DateTime 一样,我们创建一个自定义序列化器,然后我们在我们的代码中使用它来序列化 Java 中的 LocalDateTime。

CustomLocalDateTimeSerializer.java

SerializeJava8DateWithCustomSerializer.java

输出

Serialize Date by using Jackson
下一个主题Jackson JSON Views