Corda 4.9企业版删除状态字段是否仍需DeprecatedConstructorForDeserialization?
关于Corda 4.9企业版删除字段后反序列化兼容的问题解答
核心结论
Corda 4.9企业版对String/String?这类基础可空/非空类型的字段删除场景,确实存在自动兼容的反序列化优化逻辑,无需额外添加反序列化构造函数即可正常读取旧版本状态数据。
具体细节说明
- 基础类型的自动忽略机制:Corda的序列化框架(基于Jackson扩展实现)在处理旧数据时,若遇到当前类已删除但旧数据中存在的基础JVM类型字段(如String、Int、Boolean等,包括其可空变体),会自动忽略这些多余字段,不会触发反序列化异常。这是框架针对常见基础类型内置的兼容性处理。
- 自定义类型的预期表现:如果后续测试自定义数据类型的字段删除场景,大概率会出现反序列化异常。因为框架无法自动推断自定义类型的字段映射规则,必须提供对应的反序列化构造函数,才能完成旧数据到新类结构的转换。
- 与官方建议的一致性:官方推荐添加反序列化构造函数,是覆盖所有字段变更场景的通用最佳实践。基础类型的自动处理只是框架的特例优化,无法适配自定义类型、字段类型变更等复杂升级场景。遵循官方建议能确保CordApp升级的兼容性和稳定性,避免后续扩展时出现意外问题。
内容的提问来源于stack exchange,提问作者Benjamin
相关产品推荐
相关产品推荐

