在bean类的字段结构定期更改时,如何反序列化同一bean类的不同版本?

时间:2018-08-01 15:06:15

标签: java serialization deserialization

例如,我有一个稳定的服务器正在运行。它通过序列化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<>();
    //... 
}

有什么建议吗?是否有最佳实践来应对这种情况?

1 个答案:

答案 0 :(得分:1)

如果您使用Jackson来对类进行序列化和反序列化,则可以将configurations设置为忽略未知或缺少的字段,以允许您的Status Bean得以发展:

  • FAIL_ON_UNKNOWN_PROPERTIES
  • FAIL_ON_MISSING_CREATOR_PROPERTIES

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