迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

Gson Builder — 如何使用 @Expose 忽略字段

作者:迹忆客 最近更新:2023/02/01 浏览次数:

在我们之前的文章中,我们一直假设想要(反)序列化模型的所有属性。 情况可能并非如此。 如果想自定义(反)序列化,请继续阅读下面的内容!


模型注解 @Expose

在阅读了上一篇关于 null 处理的文章 之后,大家可能会认为如果我们不希望它显示在 JSON 中,我们只需将 Java 对象字段设置为 null。 当我们不想通过网络传输私人或敏感数据时,这可能是必要的。 不用担心,Gson 使用注解 @Expose 提供了一个更简单的解决方案。

@Expose 是可选的,它提供了两个配置参数:serializedeserialize 。 默认情况下,一切都设置为 true。 因此,如果我们不使用 @Expose 增强任何字段,就像我们在之前所做的那样,所有内容都将包括在内。 如果我们设置了 @Expose,但没有将任一值专门设置为 false,它仍将被包含在内。

让我们重新访问 UserSimple 类并添加一些 @Expose 注解:

public class UserSimple {  
    @Expose()
    String name; // 序列化和反序列化

    @Expose(serialize = false, deserialize = false)
    String email; // 既不序列化也不反序列化

    @Expose(serialize = false)
    int age; // 反序列化

    @Expose(deserialize = false)
    boolean isDeveloper; // 序列化
}

上面的示例将导致在序列化期间只有 nameisDeveloper 字段将显示在 JSON 中。 其他两个字段,即使已设置,也不会被转换。

在反序列化的另一个方向上,Java 对象将只有 nameage 字段的 JSON 值, emailisDeveloper 将被忽略。

默认的 Gson 实例不会考虑 @Expose。 为了使用它,我们需要使用自定义 Gson 实例:

GsonBuilder builder = new GsonBuilder();  
builder.excludeFieldsWithoutExposeAnnotation();  
Gson gson = builder.create();  

以下所有 gson 的使用都将考虑 @Expose 注解。

@Expose 是一种控制哪些值被(反)序列化的简单方法。 如果大家想要转换所有内容,我们建议不要使用 @Expose

下面我们看一下效果

String userJson = "{'age': 26, 'isDeveloper': true, 'email': 'jiyik_onmpw@163.com','name':'jiyik'}";

// 创建支持 Expose 注解的对象
GsonBuilder builder = new GsonBuilder();
builder.excludeFieldsWithoutExposeAnnotation();
Gson gson = builder.create();

UserSimple userObject = gson.fromJson(userJson, UserSimple.class);

这时的 userObject 对象的内容如下

Gson Expose 注解


transient

使用 @Expose 的另一种方法是将字段声明为transient。 transient字段也不会被(反)序列化。 但是,不像使用 @Expose 那样拥有完全控制权。 我们不能停用一个方向(序列化或反序列化),瞬态将始终完全关闭该属性的转换。

public class UserSimple {  
    String name;
    String email;
    int age;
    boolean transient isDeveloper; // 不会被序列化和反序列化
}

在本篇内容中,我们将了解如何配置 @Expose 从而在(反)序列化期间排除和包含模型属性。 我们可能在日常工作中需要它,因此请务必正确理解它。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Gson 通过@JsonAdapter 自定义(反)序列化

发布时间:2022/07/24 浏览次数:217 分类:编程语言

在这篇文章中,我们将展示如何简化(反)序列化的自定义。 所有这些选项都只能通过自定义 Gson 实例和一些样板代码获得。 Gson 2.7 引入了一个简单的注解,我们可以节省大量代码并获

Gson 自定义反序列化基础

发布时间:2022/07/21 浏览次数:81 分类:编程语言

在这篇文章中,我们将了解如何实现自定义 Gson 反序列化。 如果服务器以与客户端的应用程序数据模型不匹配的格式向我们发送数据,请继续阅读!

Gson 泛型映射

发布时间:2022/07/19 浏览次数:234 分类:编程语言

在这篇文章中,我们将探讨 Gson 如何处理 Java 泛型。 泛型对于任何数据映射库都是一个挑战,因为它们带来了不确定性。 如果我们想查看 Java 泛型、用例和含义,请随时阅读 Wikipedia 文

Gson 自定义实例创建器

发布时间:2022/07/14 浏览次数:121 分类:编程语言

在这篇文章中,我们将讨论自定义反序列化的另一个组件。 在过去的几篇文章中,我们探讨了如何自定义数据的序列化和反序列化。 在这两种情况下,我们都试图减轻服务器和客户端之

Gson 循环引用的映射

发布时间:2022/07/13 浏览次数:173 分类:编程语言

在这篇文章中,我们将讨论一个特别讨厌的话题:循环引用。 我们可能在计算机科学或图表数学课上听说过循环引用。 在更实际的解释中:它处理对象具有指向不同对象的嵌套属性的情

Gson Builder Floats 和 Doubles 的特殊值

发布时间:2022/07/12 浏览次数:193 分类:编程语言

在上一篇 Gson 的文章中,我们研究了使 JSON 转换降低标准的选项。 Lenient 允许传入的 JSON 在某种程度上是非标准的,Gson 仍然能够将其解析为 Java 对象。 在这篇文章中,我们将研究一个

Gson 自定义序列化

发布时间:2022/07/11 浏览次数:117 分类:编程语言

在这篇文章中,我们将探讨如何自定义 Java 对象的 Gson 序列化。 我们可能想要更改序列化的原因有很多,例如 简化我们的模型以减少发送的数据量或删除个人信息。 现在我们将通过实

Gson 映射 Enum 枚举

发布时间:2022/07/10 浏览次数:156 分类:编程语言

在之前的文章中我们介绍了如何映射嵌套对象、数组和列表、Java Map 等。 在这篇文章中,您将学习如何(反)序列化 Java 枚举 Enum。

Gson 如何反序列化多态对象列表

发布时间:2022/07/09 浏览次数:286 分类:编程语言

最近,我们遇到了一种情况,我从 REST 端点接收到 JSON 格式的对象列表。 到目前为止,这没有什么不寻常的,也不是问题。 然而,问题是对象是多态的,需要解析子类特定的字段。 以

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便