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

使用Jackson XMLMapper反序列化含混合元素的XML列表时列表为空的问题

使用Jackson XMLMapper反序列化含混合元素的XML列表时列表为空的问题

我之前也碰到过一模一样的问题!核心原因是Jackson默认没法自动识别同一个<items>容器下混合的<input>和<output>元素,需要调整注解配置来明确它们的归属关系。下面给你两种可行的解决方案:

方案一:创建中间Items类(更清晰,推荐)

这种方式通过一个中间类来对应XML里的<items>标签,结构更符合XML的层级,也更容易维护:

  1. 先定义Input和Output类,注意用@JacksonXmlProperty(isAttribute = true)来映射name属性:
public class Input {
    @JacksonXmlProperty(isAttribute = true)
    private String name;

    // 记得添加getter和setter方法
}

public class Output {
    @JacksonXmlProperty(isAttribute = true)
    private String name;

    // 记得添加getter和setter方法
}
  1. 创建Items类,用来包裹两个列表。这里的关键是给每个列表加上@JacksonXmlElementWrapper(useWrapping = false),告诉Jackson不要给列表额外生成一层包装标签,直接把<items>下的<input>/<output>元素收集到对应列表中:
public class Items {
    @JacksonXmlProperty(localName = "input")
    @JacksonXmlElementWrapper(useWrapping = false)
    private List<Input> inputs;

    @JacksonXmlProperty(localName = "output")
    @JacksonXmlElementWrapper(useWrapping = false)
    private List<Output> outputs;

    // 记得添加getter和setter方法
}
  1. 修改Action类,添加Items字段并映射到<items>标签:
public class Action {
    @JsonProperty("items")
    private Items items;

    // 记得添加getter和setter方法
}
  1. 你的Model类保持原有配置就可以:
public class Model {
    @JsonProperty("action")
    private Action action;

    // 记得添加getter和setter方法
}

方案二:直接在Action类中配置注解(无需中间类)

如果不想额外创建Items类,也可以直接在Action的两个列表字段上配置注解,指定它们的共同容器是<items>:

public class Action {
    @JacksonXmlElementWrapper(localName = "items")
    @JacksonXmlProperty(localName = "input")
    private List<Input> inputs;

    @JacksonXmlElementWrapper(localName = "items")
    @JacksonXmlProperty(localName = "output")
    private List<Output> outputs;

    // 记得添加getter和setter方法
}

这里两个列表都用@JacksonXmlElementWrapper(localName = "items"),Jackson就会自动把<items>下的所有<input>元素放到inputs列表,<output>元素放到outputs列表。

完成配置后,再运行你原来的反序列化代码:

Model m = xmlMapper.readValue(file, Model.class);

现在两个列表应该就能正确获取到XML里的元素了。

备注:内容来源于stack exchange,提问作者user1154644

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 09:50:29