XmlElement注解在Java列表属性:要注意实例化,否则从xml数据反序列化到Java对象会失败

例如,下面的代码,Java类Conditions的属性conditionList是一个列表类型。XmlRootElement注解在conditionList的get方法上(等同于注解在属性上)。需要注意该属性的实例化,如果不实例化的话,从xml数据反序列化到Java对象的时候出错。

可以在两个地方实例化:

  • 在 get方法中,首先判断conditionList是否为null,如果为null的话,则实例化:

    package com.thb.platform;

    import java.util.ArrayList;
    import java.util.List;

    import jakarta.xml.bind.annotation.XmlAttribute;
    import jakarta.xml.bind.annotation.XmlElement;
    import jakarta.xml.bind.annotation.XmlRootElement;
    import jakarta.xml.bind.annotation.XmlType;
    import jakarta.xml.bind.annotation.XmlValue;

    @XmlRootElement(name = "conditions")
    @XmlType(propOrder = {"identify", "table", "conditionList", "total", "pageSize", "pageNo"})
    public class Conditions {
    ...省略
    private List<Conditions.Condition> conditionList;

    复制代码
      @XmlElement(name = "condition")
      public List<Conditions.Condition> getconditionList(){
          if (conditionList == null) {
              conditionList = new ArrayList<>();
          }
          return this.conditionList;
      }
      
      public void setCondition( List<Conditions.Condition> conditionList) {
          this.conditionList = conditionList;
      }

    ...省略

    复制代码
      @XmlType(propOrder = {"value"})
      public static class Condition {

    ...省略
    }
    }

  • 在声明属性conditionList的时候实例化:

    package com.thb.platform;

    import java.util.ArrayList;
    import java.util.List;

    import jakarta.xml.bind.annotation.XmlAttribute;
    import jakarta.xml.bind.annotation.XmlElement;
    import jakarta.xml.bind.annotation.XmlRootElement;
    import jakarta.xml.bind.annotation.XmlType;
    import jakarta.xml.bind.annotation.XmlValue;

    @XmlRootElement(name = "conditions")
    @XmlType(propOrder = {"identify", "table", "conditionList", "total", "pageSize", "pageNo"})
    public class Conditions {
    ...省略

    复制代码
      private List<Conditions.Condition> conditionList = new ArrayList<>();
    
      @XmlElement(name = "condition")
      public List<Conditions.Condition> getconditionList(){
          return this.conditionList;
      }
      
      public void setCondition( List<Conditions.Condition> conditionList) {
          this.conditionList = conditionList;
      }

    ...省略

    复制代码
      @XmlType(propOrder = {"value"})
      public static class Condition {

    ...省略
    }
    }

相关推荐
小羊没烦恼!2 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里2 天前
java中的继承和多态的区别
java
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕2 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码2 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖2 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时2 天前
01-06-A-JVM排查实战详解
java·jvm
vipxieliang2 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
ba_pi2 天前
mysql 查询所有表名并授权
java
ProcessOn官方账号2 天前
java函数式编程--入门基础
java·编程·函数式编程