如何在bean类的字段结构周期性变化的情况下反序列化同一bean类的不同版本



例如,我有一个稳定的服务器在运行。它通过以json格式序列化Status实例,在zookeeper实例上注册服务器状态。

过了一段时间,我向Status类添加了一个实例字段,并启动了另一个testserver,在同一个zookeeper实例上注册其服务器状态。

现在我需要编写一些检查器程序来监视这两个服务器。我应该怎么做才能正确地反序列化这两个版本,并有望处理Status类的未来版本?

我尝试删除所有字段,改为使用地图。但是感觉不是很方便。像这样:

public class Status
{
private int serverId;
//...
}
// changes to
public class Status
{
public static final String SERVERID = "serverId";
private Map<String, Object> properties = new HashMap<>();
//... 
}

有什么建议吗?有没有处理这种情况的最佳实践?

如果您使用Jackson来序列化和反序列化您的类,您可以将配置设置为忽略未知或丢失的字段,以允许您的Status bean的演变:

  • 失败_ON_UNKNOWN_PROPERTIES
  • 失败_缺失_创建者_属性

这将允许监视器使用不同版本的服务器状态JSON实例。

最新更新