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 {

    ...省略
    }
    }

相关推荐
天天摸鱼的java工程师15 分钟前
别再写那些重复代码了!8年Java老兵教你用 Hutool 提升开发效率
java·后端
喝杯绿茶17 分钟前
springboot中的事务
java·spring boot·后端
麦兜*21 分钟前
多阶段构建:打造最小化的 Spring Boot Docker 镜像
java·spring boot·后端·spring cloud·docker
oak隔壁找我30 分钟前
Spring Boot Starter 入门教程
java·后端
YoungP30 分钟前
【Effective Java 条目一】-- 用静态工厂方法替代构造器
java
高山上有一只小老虎31 分钟前
求最大连续bit数
java·算法
vxiam14xxx34 分钟前
【Java Swing 项目】java 聊天系统
java·开发语言·python
Dylan的码园42 分钟前
以二叉树问题为基础的递归调试学习(上)
java·学习·算法·leetcode·r-tree
少许极端1 小时前
算法奇妙屋(九)-栈
java·数据结构·算法·
shepherd1111 小时前
破局延时任务(下):Spring Boot + DelayQueue 优雅实现分布式延时队列(实战篇)
java·spring boot·后端