使用 Jackson 序列化和反序列化特定字段

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

在本节中,我们将探讨可以通过哪些方式控制字段是否被序列化/反序列化。 Jackson 提供了以下几种方式来使字段被序列化或反序列化。

  1. 通过将字段声明为 public
  2. 通过使用 getter 方法(可序列化和可反序列化)
  3. 通过使用 setter 方法(仅可反序列化)
  4. 通过全局序列化所有字段
  5. 在序列化/反序列化时重命名属性

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

1. 通过将字段声明为 Public

这是使字段可序列化和反序列化的最简单方法之一。 在这种方式中,我们只需将字段声明为 public 即可。 我们将声明一个包含 public、protected 和 private 字段的类。

默认情况下,只有可用的字段才会被序列化为 JSON。

让我们举个例子来了解如何通过将字段声明为 public 来使其可序列化和反序列化。

SerializeAndDeserializeExample1.java

输出

Serialize and Deserialize Specific Fields in Jackson

2. 通过使用 getter 方法

在前一种方法中,我们将字段标记为 public,以使其可序列化和反序列化。 大多数时候,我们需要序列化或反序列化一个非 public 字段,或者说,包私有字段和 private 字段。 为了序列化/反序列化一个非 public 字段,我们只需使用该字段的 getter。

让我们举个例子来了解如何序列化一个非 public 字段。

SerializeAndDeserializeExample2.java

输出

Serialize and Deserialize Specific Fields in Jackson

3. 通过使用 setter 方法

getter 方法用于可序列化和可反序列化,而 setter 方法仅用于可反序列化。 我们使用 setter 方法如下所示

让我们举个例子来了解如何使用 setter 方法使非 public 字段可反序列化。

SerializeAndDeserializeExample3.java

输出

Serialize and Deserialize Specific Fields in Jackson

4. 通过全局序列化所有字段

在某些情况下,我们无法直接修改源代码,因此我们需要一种方法,通过该方法 Jackson 可以处理来自外部的 private 字段。 这种全局配置将在 ObjectMapper 级别完成。 我们只需打开 AutoDetect 功能即可将其用于序列化。

我们按如下方式打开 AutoDetect 功能

让我们举个例子来了解如何使用 AutoDetect 功能来使所有字段可序列化。

SerializeAndDeserializeExample4.java

输出

Serialize and Deserialize Specific Fields in Jackson

5. 在序列化/反序列化时重命名属性

在上面的示例中,我们控制了将要序列化或反序列化的字段。 除此之外,我们还可以控制字段映射到 JSON 和返回的方式。

为了更改字段名称,我们使用 @JsonProperty 注解。 在注解构造函数中,我们传递属性的名称。

让我们举个例子来了解如何使用 @JsonProperty 注解来更改用于序列化的字段名称。

SerializeAndDeserializeExample5.java

输出

Serialize and Deserialize Specific Fields in Jackson