例如,我有一个稳定的服务器在运行。它通过以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实例。