jaxb list集合对象

示范代码

以下演示代码将用于Java模型的所有不同版本。 它只是将一个集合设置为null,第二个设置为空列表,第三个设置为填充列表。

package package blog.xmlelementwrapper;import java.util.ArrayList;
import javax.xml.bind.*;public class Demo {public static void main(String[] args) throws Exception {JAXBContext jc = JAXBContext.newInstance(Root.class);Root root = new Root();root.nullCollection = null;root.emptyCollection = new ArrayList<String>();root.populatedCollection = new ArrayList<String>();root.populatedCollection.add('foo');root.populatedCollection.add('bar');Marshaller marshaller = jc.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.marshal(root, System.out);}}

映射1-默认

JAXB模型不需要任何注释(请参见JAXB –不需要注释 )。 首先,我们将了解集合属性的默认行为。

package blog.xmlelementwrapper;import java.util.List;
import javax.xml.bind.annotation.*;@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {List<String> nullCollection;List<String> emptyCollection;List<String> populatedCollection;}

检查输出,我们看到对应于nullCollectionemptyCollection字段的输出是相同的。 这意味着使用默认映射,我们无法往返实例。 对于非编组用例, nullCollectionemptyCollection的值将是该类将其初始化为的字段的值(在这种情况下为null)。

<?xml version='1.0' encoding='UTF-8'?>
<root><populatedCollection>foo</populatedCollection><populatedCollection>bar</populatedCollection>
</root>

映射#2 – @XmlElementWrapper

@XmlElementWrapper批注用于在集合的内容周围添加分组元素。 除了更改XML表示的外观,它还使我们能够区分null和空集合。

package blog.xmlelementwrapper;import java.util.List;
import javax.xml.bind.annotation.*;@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {@XmlElementWrapperList<String> nullCollection;@XmlElementWrapperList<String> emptyCollection;@XmlElementWrapperList<String> populatedCollection;}

空集合的表示形式保持不变,但XML文档中不存在。 对于空集合,我们看到仅分组元素被整理。 由于null和empty的表示形式不同,因此我们可以往返使用该用例。

<?xml version='1.0' encoding='UTF-8'?>
<root><emptyCollection/><populatedCollection><populatedCollection>foo</populatedCollection><populatedCollection>bar</populatedCollection></populatedCollection>
</root>

映射#3 – @XmlElementWrapper(nillable = true)

@XmlElementWrapper批注上的nillable属性可用于更改null集合的XML表示形式。

package blog.xmlelementwrapper;import java.util.List;
import javax.xml.bind.annotation.*;@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {@XmlElementWrapper(nillable=true)List<String> nullCollection;@XmlElementWrapper(nillable=true)List<String> emptyCollection;@XmlElementWrapper(nillable=true)List<String> populatedCollection;}

现在,所有三个字段都存在分组元素。 xsi:nil属性用于指示nullCollection字段为null。 像以前的映射一样,此映射可以往返。

<?xml version='1.0' encoding='UTF-8'?>
<root><nullCollection xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:nil='true'/><emptyCollection/><populatedCollection><populatedCollection>foo</populatedCollection><populatedCollection>bar</populatedCollection></populatedCollection>
</root>

参考: JAXB –在Java XML和JSON绑定博客上代表我们的JCG合作伙伴 Blaise Doughan的空集合和空集合。

翻译自: https://www.javacodegeeks.com/2012/12/jaxb-representing-null-and-empty-collections.html

jaxb list集合对象

jaxb list集合对象_JAXB –表示空集合和空集合相关推荐

  1. JAXB –表示空集合和空集合

    示范代码 以下演示代码将用于Java模型的所有不同版本. 它只是将一个集合设置为null,第二个设置为空列表,第三个设置为填充列表. package package blog.xmlelementwr ...

  2. java返回空集合对象_返回null或空集合更好吗?

    这是一个普遍的问题(但是我正在使用C#),最好的方法是什么(最佳实践),对于以集合为返回类型的方法,您是否返回null或空集合? #1楼 我想在这里举例说明. 在这里考虑一个案例. int total ...

  3. [Python] Python数据类型(三)集合类型之set集合和frozenset集合

    1.集合基本概念 集合是0-n个对象引用的无序组合,集合中存储的元素不可重复,因此这些对象引用的引用的对象必须是可哈希运算的 . 1.python中提供了两种内置的集合类型:可变的set类型和固定的f ...

  4. python中的集合set类型是可变的吗_[Python] Python数据类型(三)集合类型之set集合和frozenset集合...

    1.集合基本概念 集合是0-n个对象引用的无序组合,集合中存储的元素不可重复,因此这些对象引用的引用的对象必须是可哈希运算的 .  1.python中提供了两种内置的集合类型:可变的set类型和固定的 ...

  5. 7.Set集合总结(TreeSet集合和HashSet集合)

    一.Set集合 1.Set集合特点 可以去除重复 存取顺序不一致 没有带索引的方法,所以不能使用普通的for循环遍历,也不能通过索引来获取.删除Set集合里面的元素. 2.Set集合中元素的遍历 二. ...

  6. List集合对象首字母排序

    List集合对象首字母排序 创建一个集合对象 List<Map<String,Object>> data1 = new ArrayList<>();HashMap& ...

  7. 「Redis数据结构」集合对象(Set)

    「Redis数据结构」集合对象(Set) 文章目录 「Redis数据结构」集合对象(Set) 一.概述 二.结构 三.编码转换 四.小结 一.概述 Set是Redis中的单列集合,其特点为不保证有序性 ...

  8. collection集合 地址_java.util包下的集合

    Java 集合可分为 Collection 和 Map 两种体系 1.Collection接口:单列数据,定义了存取一组对象的方法的集合 List:元素有序.可重复的集合 Set:元素无序.不可重复的 ...

  9. python空集合_python空集合

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! - 不可变数据类型实现某个功能,需要将结果赋值给另外一个变量; 是否实现for循 ...

最新文章

  1. 三星s10android10功能,三星S10系列现场上手体验:“安卓机皇”真的名副其实
  2. PaintCode 教程1:动态绘制按钮
  3. js 正则 或者_正则表达式
  4. Java开发人员需要掌握数据库的知识点有哪些?
  5. 特斯拉在美国召回947辆电动汽车 因倒车影像显示延迟
  6. 网络 传输层 | UDP协议与TCP协议详解(三次握手及四次挥手、滑动窗口、拥塞控制)
  7. 【报告分享】2019移动互联网行业报告暨无监督机器学习下的2019行业价值人群聚类报告.pdf...
  8. 单例模式(七种实现方法)
  9. Linux中,shell脚本调用java程序模板
  10. xc7k325tffg900芯片手册_XC7K325TFFG900_Spartan-3【太航半导体】闻喜县
  11. 天体观测位置的计算--方位角和俯仰角
  12. 软考真题答案-2021年11月系统集成项目管理工程师上午题(二)
  13. 使用python中tkinter库显示图片点击按钮跳跳下一张图片
  14. 知乎爆赞!4504页《微信小程序零基础入门开发文档》+《小程序实战笔记》,你学废了吗?
  15. 微信H5、公众号开发,域名重定向
  16. FFT 快速傅里叶变换 初探
  17. php 怎么打开一个pdf,pdf是什么?用什么打开?
  18. 字符串分割【Java】
  19. 台式计算机m4350,比超极本便携 评联想M4350q小型台式机
  20. django 自定义中间件实现访问频率限制和IP禁用

热门文章

  1. 漫画:如何实现大整数相加
  2. 1分钟了解协同过滤,pm都懂了
  3. js遍历对象的key和value
  4. 项目参与度较低怎么办?
  5. ssm使用全注解实现增删改查案例——applicationContext.xml
  6. tsc244标签编辑软件_能打小票的标签机,M110智能标签打印机来了!
  7. tomcat(11)org.apache.catalina.core.StandardWrapper源码剖析
  8. graal java_如何在CircleCI上构建支持Graal的JDK8?
  9. cassandra 备份_使用sstableloader恢复Cassandra Priam备份
  10. jdk8 npe_JDK 14中更好的NPE消息