当我们从 Jackson 版本 2.8.9 切换到 2.9.8 时,我们在以 CBOR 格式序列化数据时遇到了一些麻烦。事实证明,我们一直在使用的自定义 Jackson 模块在这个新版本中造成了麻烦。这些问题从版本 2.9.0 开始。
我创建了一个重现问题的存储库,发现当我禁用我们的自定义问题时,TemporalAmountModule
问题就消失了。我自己没有写,TemporalAmountModule
但看起来自定义序列化器和反序列化器是罪魁祸首。这些并没有引入任何复杂的代码,但我真的不明白为什么它们不再正常工作,因为我不熟悉序列化器和反序列化器。
我已经创建了一个存储库来重现我遇到的问题。当您禁用该模块时,您可以看到它工作正常。当您将 jackson 版本更改为 2.8.x(该范围内的最新版本是 2.8.11)时,您可以看到它也可以正常工作。
https://github.com/Archcry/reproduce-jackson-error
预期结果应该与 2.8.9 版(或 2.8.11 版)中的结果相同。Jackson 不应该破坏次要版本中的任何功能,但它可能会弃用某些方法(他们确实这样做了)。不推荐使用的方法不是导致问题的方法,因为我尝试更新它们但最终得到相同的结果。目前的实际结果是错误的说法Can not write a field name, expecting a value
。