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 {
    

    ...省略
    }
    }

相关推荐
白晨并不是很能熬夜几秒前
【JVM】字节码指令集
java·开发语言·汇编·jvm·数据结构·后端·javac
火烧屁屁啦6 分钟前
【JavaEE进阶】Spring AOP详解
java·spring·java-ee
卡布奇诺-海晨15 分钟前
JVM之Arthas的dashboard命令以及CPU飙高场景
java·spring boot
学c真好玩19 分钟前
Spring
java·后端·spring
沉默王二23 分钟前
更快更强!字节满血版DeepSeek在IDEA中真的爽!
java·前端·程序员
2301_8074492023 分钟前
字符串相乘——力扣
java·算法·leetcode
小五Z28 分钟前
RabbitMQ高级特性--消息确认机制
java·rabbitmq·intellij-idea
Kevinyu_39 分钟前
Maven
java·maven
nickxhuang44 分钟前
【基础知识】回头看Maven基础
java·maven
日月星辰Ace1 小时前
jwk-set-uri
java·后端