1

我需要关于兼容更改和 serialVersionUID ( http://docs.oracle.com/javase/6/docs/platform/serialization/spec/version.html#6678 ) 的建议。

我在一个带有“客户端”项目的系统上工作,该项目使用 RPC 与“服务器”项目通信(“服务器”使用 DTO 类从数据库导出数据,“客户端”使用相同的 DTO 类呈现该数据)。

当在 DTO 类中添加字段时,团队决定不更改 serialversionUID,因此当部署新版本的“服务器”时,不需要立即部署“客户端”,因为该 DTO 类的旧版本是与新的兼容。

但是(因为我们在两个项目中都有几十个系统实例),如果使用新版本的 DTO 类部署了新版本的“客户端”,并且“服务器”由于某种原因保留在旧版本中,那么新的字段的 DTO 类将解析为 null,并将作为 null 呈现给客户,这可能是不正确的。

有没有解决这个问题的最佳实践?我们可以在 DTO 类中进行任何类型的更改时更改 UID,但是我们将始终必须同时部署两个项目,即使没有使用更改,我们正在努力避免这种情况......

4

1 回答 1

0

更改 UID 不是解决方案,而是问题的一部分。不要那样做。

添加新字段时,您还可以将逻辑添加到readObject()同一类的方法中,以便在它为空时为其提供合理的默认值。

于 2015-07-12T00:34:05.783 回答