一个用 GSON 序列化为 JSON 的 Class 是否应该实现可序列化接口
Should a Class which is serialzied with GSON to JSON implemet the Serializable Interface
我有这个 POJO,正在使用 new Gson().toJson(entity) 序列化到 JSON
我应该在此 POJO 上实现可序列化接口吗?
@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;
}
不,没有必要。 Gson 使用反射来产生所需的 json。您应该在以下情况下实施 Serializable
:
- 将其保存在磁盘上
- 通过套接字将其作为对象发送
例如,如果您在集群中的两个或多个节点上以 HA 方式部署了一个 Web 应用程序(然后它们相互交换会话),并且您使用会话范围来保存用户身份验证,则包含此的 bean信息必须是可序列化的。
如果您决定使用 Serializable
,请添加 serialVersionUID
。这是 JVM 长期使用的一种以唯一方式识别对象本身的方法。
当您不对其进行 sepcify 时,编译器会添加一个生成的(因此依赖于编译器)并且当您更改对象时此标识会更改,例如添加一个字段;这意味着在进行最小的更改后,您不应反序列化更改前序列化的对象。
我有这个 POJO,正在使用 new Gson().toJson(entity) 序列化到 JSON 我应该在此 POJO 上实现可序列化接口吗?
@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;
}
不,没有必要。 Gson 使用反射来产生所需的 json。您应该在以下情况下实施 Serializable
:
- 将其保存在磁盘上
- 通过套接字将其作为对象发送
例如,如果您在集群中的两个或多个节点上以 HA 方式部署了一个 Web 应用程序(然后它们相互交换会话),并且您使用会话范围来保存用户身份验证,则包含此的 bean信息必须是可序列化的。
如果您决定使用 Serializable
,请添加 serialVersionUID
。这是 JVM 长期使用的一种以唯一方式识别对象本身的方法。
当您不对其进行 sepcify 时,编译器会添加一个生成的(因此依赖于编译器)并且当您更改对象时此标识会更改,例如添加一个字段;这意味着在进行最小的更改后,您不应反序列化更改前序列化的对象。