You need to enable JavaScript to run this app. Jackson转换XML为Java对象时ServiceProviders字段引发数组索引越界异常
优惠活动
大模型
产品
解决方案
定价
更多

Jackson转换XML为Java对象时ServiceProviders字段引发数组索引越界异常

问题定位

你遇到的数组越界异常,本质是Jackson的XML列表注解配置和实际XML结构完全错配,导致<ServiceProvider>节点根本没有被映射到实体类的列表字段里,最终列表长度为0,取索引1时直接触发越界。

核心错配点

  • @JacksonXmlElementWrapper的作用是给列表元素加一层独立的专属包裹节点,而你现在把这个注解的包裹节点名设成了ServiceProvider,会让Jackson按照下面的结构找数据:
    return (<ServiceProviders>
      <ServiceProvider>
        <!-- Jackson在这里找列表项 -->
      </ServiceProvider>
    </ServiceProviders>
    )
  • 但你的实际XML结构里,<ServiceProvider>就是直接平铺在<ServiceProviders>下面的列表项,根本不存在嵌套的包裹层,Jackson自然匹配不到内容,最终给列表赋值为空。
  • 另外两个冗余注解的干扰:
    • ServiceProviders类上的@JacksonXmlRootElement属于多余配置,这个类是Data下的子节点,不是根节点,会让Jackson解析时出现元素识别冲突
    • ServiceProvider类上混用的@JsonProperty是JSON场景的注解,对XML解析没有帮助,反而可能干扰元素、属性的映射关系

逐类修正方案

1. 调整ServiceProviders类的列表配置

删除原来的错误注解,改成和XML结构匹配的配置:

@JacksonXmlRootElement(localName = "ServiceProviders")
@JsonIgnoreProperties(ignoreUnknown = true)
public class ServiceProviders {
    // 关闭额外的列表包裹层,因为<ServiceProviders>本身就是外层容器
    @JacksonXmlElementWrapper(useWrapping = false)
    // 指定列表项的节点名为ServiceProvider
    @JacksonXmlProperty(localName = "ServiceProvider")
    private List<ServiceProvider> serviceprovider;

    // 原有getter、setter、构造方法保留即可
}

2. 调整ServiceProvider类的属性映射

你的XML里<ServiceProvider>的ID、Name是节点属性,不是子元素,所以要给字段加上属性识别配置:

public class ServiceProvider {
    // 指定ID为节点属性,对应XML里的ID="xxx"
    @JacksonXmlProperty(localName = "ID", isAttribute = true)
    private String id;

    // 指定Name为节点属性,对应XML里的Name="xxx"
    @JacksonXmlProperty(localName = "Name", isAttribute = true)
    private String name;

    // 原有getter、setter、构造方法保留即可
}

3. 补全基础配置

  • 给Data类补上缺失的@JsonIgnoreProperties导入,避免编译报错
  • 取列表元素前增加判空判断,避免XML结构异常时再次触发空指针、越界问题:
    List<ServiceProvider> providerList = data.getServiceproviders().getServiceprovider();
    if (providerList != null && providerList.size() > 1) {
        System.out.println(providerList.get(1));
    }
    

内容的提问来源于stack exchange,提问作者divya roopa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 16:45:01