Jackson YAML:支持锚点扩展/覆盖 [duplicate]

Jackson YAML: support for anchor extensions/overrides [duplicate]

提问人:SusanW 提问时间:9/20/2023 更新时间:9/20/2023 访问量:65

问:

我正在尝试使用 Jackson 2.15.2 来解析锚点扩展语法:YAMLFactory

sections:
- &packetInfo
    name: packetInfo
    description: information on a received UDP packet

然后稍后:

sections:
-   <<: *packetInfo
    description: something else

但是我得到了:,并且它给出了将 视为任何其他字段名称的所有迹象。com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "<<" <<

如果我删除这样的内容,它加载正常(当然,没有覆盖选项),因此锚点/参考系统正在工作:<<:

sections:
-   *packetInfo

Jackson 不支持扩展/覆盖吗?或者是否有我需要打开的功能开关,但尚未找到?我读到处理这些是由模式完成的,而不是解析器本身。<<:

java jackson 蛇yaml

评论

0赞 SusanW 9/20/2023
@hc_dev虽然这是一个很好的答案,但另一个问题或其文本中几乎没有关于锚点扩展或覆盖的内容 - 这都是关于数组中的锚点的,这不是这里的问题。我昨晚大部分时间都在寻找答案,但没有找到 - 令人讨厌的是,它提到的被埋在代码示例中,您必须在示例中向右滚动才能看到异常详细信息。如果我们关闭它,我是否应该去那里编辑问题以使其更容易找到?<<
1赞 flyx 9/20/2023
封闭式问题保持可查找状态,因此您的问题仍然可以作为指向另一个问题的指针,我想说这已经足够了
0赞 SusanW 9/20/2023
@flyx 是的,当然 - 好的,很酷的谢谢:-)

答:

1赞 flyx 9/20/2023 #1

众所周知,杰克逊不能正确处理引用

您可以直接使用 SnakeYAML,它确实支持引用和合并键。无论如何,杰克逊在引擎盖下使用了 SnakeYAML,但不知何故搞砸了。<<

SnakeYAML 具有与 Jackson 几乎相同的功能,因此您没有太多理由需要坚持使用 Jackson。

评论

0赞 SusanW 9/20/2023
好的,感谢您的确认 - 我担心可能是这样!但坚持使用 Jackson 的一个很好的理由是,我们的整个模式是使用 Jackson MrBean 接口定义定义的,具有分辨率和子类型——它们都运行得很好。我不认为 SnakeYAML 有任何同等的支持,除非我错了?谷歌搜索没有显示任何东西......@JsonBackReference@JsonTypeInfo
0赞 hc_dev 9/20/2023
你已经回答了一个类似的问题,所以我投票决定以重复的方式关闭。同意?
0赞 flyx 9/20/2023
@hc_dev 是的,我在那里将问题的链接添加到了我的答案中(当我最初回答这个问题时,这个问题并不存在)。好发现,我不记得了。
1赞 flyx 9/20/2023
@SusanW 不幸的是,SnakeYAML 不受注释控制。根据您的管道,您可以在加载之前对 YAML 进行预处理以删除锚点和别名,在您的情况下,使用 SnakeYAML 加载和转储应该足以删除它们,然后您可以使用 Jackson 加载结果。我认为没有更简单的解决方案。Object
0赞 SusanW 9/20/2023
@flyx是的,我们已经接受了杰克逊的所有花里胡哨的东西!好的,我已经稍微重组了我的新 YAML 架构,因此我需要更改的字段超出了我想要大量重用的结构,无论如何,这是一个合理合理的更改。所以现在我只是使用普通的锚定。感谢您的帮助!