4

当我们从 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

4

1 回答 1

0

问题已在 GitHub 上解决,请参阅https://github.com/FasterXML/jackson-databind/issues/2320

编辑: 问题正在处理中,一开始就不应该发生。

编辑 2: 问题不再处理,由于缺乏上下文,很难重现。

不幸的是,虽然我可以从示例项目中看到异常,但我无法使用组合构建更简单的版本。我想知道这是否可能与使用不可变、注释有关。所以我想我现在就保持原样。

于 2019-05-07T12:29:53.140 回答