You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jackson读取混合同级节点时覆盖旧节点问题求助

Jackson XML解析混合顺序同级节点时列表被覆盖的问题

这不是Jackson的Bug,是XML模块默认解析行为导致的。

问题原因

当使用@JacksonXmlElementWrapper(useWrapping = false)绑定无包装的列表节点时,Jackson XML模块默认会在遇到非列表节点时结束当前列表的解析。后续再出现的同类型节点会被当作新的列表数据源,覆盖之前已收集的内容。在你的测试用例中,第一个<NodeA>被解析后,遇到<NodeB>时Jackson认为nodeA字段已解析完成,当再次遇到<NodeA>时会重新初始化列表,最终只保留最后一个<NodeA>的内容。

解决方案

通过启用DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY配置,让Jackson将单个节点视为数组的一部分,同时允许累积所有分散出现的同类型节点。修改你的XmlMapper初始化代码:

val xmlMapper = XmlMapper.builder()
    .enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
    .addModule(kotlinModule())
    .build()

修改后,Jackson会将所有<NodeA>节点(无论是否被其他节点隔开)都收集到nodeA列表中,测试即可通过。

注意:确保你的Jackson XML模块版本为2.9及以上,该配置在较早版本中可能存在兼容性问题。

内容的提问来源于stack exchange,提问作者Daniel Cheng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 18:13:24