当我们从杰克逊版本2.8.9切换到2.9.8时,在以CBOR格式序列化数据时遇到了一些麻烦。事实证明,我们一直在使用的自定义Jackson模块在此较新版本中引起了麻烦。这些问题从版本2.9.0开始。
我已经制作了一个可重现该问题的存储库,发现禁用自定义TemporalAmountModule
时,该问题已消失。我自己没有写TemporalAmountModule
,但看起来Custom Serializer和Deserializer是罪魁祸首。这些没有引入任何复杂的代码,但是我真的不明白为什么它们不能再正常工作了,因为我不熟悉序列化器和反序列化器。
我已经建立了一个存储库,该存储库再现了我遇到的问题。当您禁用该模块时,您可以看到它运行正常。将杰克逊版本更改为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
。
答案 0 :(得分:0)
问题已在GitHub上解决,请参见https://github.com/FasterXML/jackson-databind/issues/2320
编辑: 问题正在研究中,一开始就不应该发生。
修改2: 由于缺少上下文,因此无法再解决问题。
不幸的是,虽然我可以从示例项目中看到异常,但是我无法使用组合构造更简单的版本。我想知道这是否与不可变注释的使用有关。 所以我想现在就这样。