我需要有关兼容更改和serialVersionUID(http://docs.oracle.com/javase/6/docs/platform/serialization/spec/version.html#6678)的建议。
我在一个带有'client'项目的系统上工作,该项目使用RPC与'server'项目进行通信('server'使用DTO类从DB导出数据,'client'使用相同的DTO类提供数据)。
当在DTO类中添加字段时,团队决定不更改serialversionUID,因此当部署新版本的“server”时,不需要立即部署“client”,因为旧版本的DTO类与新类兼容。
但是(因为我们有两个项目的几十个系统实例),如果新版本的“客户端”部署了新版本的DTO类,而“服务器”由于某种原因仍然保留在旧版本中,那么DTO类的新字段将解析为null,并将显示为null给客户,这可能是不正确的。
有什么最佳做法可以解决这个问题吗?我们可以更改DTO类中任何类型的更改的UID,但是我们将始终必须同时部署两个项目,即使没有使用更改,我们也试图避免这样做......
答案 0 :(得分:0)
更改UID不是解决方案,它是问题的一部分。不要这样做。
添加新字段时,您还可以将逻辑添加到同一类的readObject()
方法中,如果它为空,则为其提供合理的默认值。