使用 GSON 序列化到 JSON 的类是不是应该实现可序列化接口

Posted

技术标签:

【中文标题】使用 GSON 序列化到 JSON 的类是不是应该实现可序列化接口【英文标题】:Should a Class which is serialzied with GSON to JSON implemet the Serializable Interface使用 GSON 序列化到 JSON 的类是否应该实现可序列化接口 【发布时间】:2020-05-04 07:38:54 【问题描述】:

我有这个 POJO,它正在使用 new Gson().toJson(entity) 序列化为 JSON 我应该在这个 POJO 上实现 Serializable 接口吗?

@Data
public class BankcodeJSONEntity 

    @NotNull
    @Size(min = 8, max = 8)
    private String bankcode;
    @NotNull
    @Size(min = 11, max = 11)
    private String bic;
    @NotNull
    private String ticket;

    @Basic
    @Temporal(TemporalType.DATE)
    @NotNull
    private Date date;
    @NotNull
    private String category;
    @NotNull
    private String name;


【问题讨论】:

【参考方案1】:

不,没有必要。 Gson 使用反射来生成所需的 json。你应该在以下情况下实现Serializable

    将其保存在磁盘上 通过套接字将其作为对象发送

例如,如果您在集群中的两个或多个节点上以 HA 部署了一个 Web 应用程序(然后它们相互交换会话),并且您使用会话范围来保存用户身份验证,则包含此信息的 bean 必须可序列化。

如果您决定使用Serializable,请添加serialVersionUID。这是 JVM 长期以来用来以唯一方式标识对象本身的一种方式。

当您不对其进行 sepcify 时,编译器会添加一个生成的(因此取决于编译器),并且当您更改对象时,此标识会更改,例如添加一个字段;这意味着在进行最小更改后,您不应反序列化在更改之前序列化的对象。

【讨论】:

有人可能会提到,Serializable 被普遍认为是一种糟糕的设计(绕过构造函数),应该避免。

以上是关于使用 GSON 序列化到 JSON 的类是不是应该实现可序列化接口的主要内容,如果未能解决你的问题,请参考以下文章

如何使用GSON配置哪些POJO字段序列化为JSON?

Java 中 Gson的使用

如何将缓存的 json 字符串与 gson 一起使用?

Gson解析(序列化,反序列化)

Android Gson 使用详解

使用 gson 序列化 json