无法写字段名称,需要一个值

时间:2019-05-07 08:35:22

标签: java jackson temporal immutables-library cbor

当我们从杰克逊版本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

1 个答案:

答案 0 :(得分:0)

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

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

修改2: 由于缺少上下文,因此无法再解决问题。

  

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