EclipseLink JAXB(MOXy)的优势之一是能够通过一组元数据将对象模型映射到JSON和XML。 一个弱点是您需要在JSON键或XML元素上折衷集合属性。 我很高兴地说这个问题已经在EclipseLink 2.5(和EclipseLink 2.4.2)中得到解决,下面将通过一个示例进行演示。 您可以从2013年3月15日开始从晚上下载EclipseLink 2.5.0(或EclipseLink 2.4.2)每晚构建的版本,以进行尝试。

  • http://www.eclipse.org/eclipselink/downloads/nightly.php

领域模型

默认情况下, JAXB(JSR-222)实现不会在集合数据周围输出分组元素。 这可以通过使用@XmlElementWrapper批注来完成(请参阅:J AXB和Collection属性
)。 该分组元素通常具有多个名称,并且比@XmlElement批注定义的重复元素更适合JSON数组的键。

package blog.json.collections;import java.util.*;
import javax.xml.bind.annotation.*;@XmlRootElement
@XmlType(propOrder={'name', 'emailAddresses'})
public class Customer {private String name;private List<String> emailAddresses = new ArrayList<String>();public String getName() {return name;}public void setName(String name) {this.name = name;}@XmlElementWrapper(name='email-addresses')@XmlElement(name='email-address')public List<String> getEmailAddresses() {return emailAddresses;}public void setEmailAddresses(List&lt'String> emailAddresses) {this.emailAddresses = emailAddresses;}}

演示版

我们将使用一个值指定JSON_WRAPPER_AS_ARRAY_NAME属性,以告诉MOXy它应该使用分组元素作为JSON数组值的名称。 然后,我们将使用相同的Marshaller将相同的对象输出到XML和JSON。

package blog.json.collections;import java.util.*;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.MarshallerProperties;public class Demo {public static void main(String[] args) throws Exception {Customer customer = new Customer();customer.setName('Jane Doe');customer.getEmailAddresses().add('jane.doe@example.com');customer.getEmailAddresses().add('jdoe@example.org');Map<String, Object> properties = new HashMap<String, Object>(1);properties.put(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);JAXBContext jc = JAXBContext.newInstance(new Class[] {Customer.class}, properties);Marshaller marshaller = jc.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// Output XMLmarshaller.marshal(customer, System.out);// Output JSONmarshaller.setProperty(MarshallerProperties.MEDIA_TYPE, 'application/json');marshaller.marshal(customer, System.out);}}

XML输出

以下是运行演示代码的XML输出。 我们看到电子邮件地址被编组为分组元素,其中包含集合中每个项目的电子邮件地址元素。

<?xml version='1.0' encoding='UTF-8'?>
<customer><name>Jane Doe</name><email-addresses><email-address>jane.doe@example.com</email-address><email-address>jdoe@example.org</email-address></email-addresses>
</customer>

JSON输出

以下JSON输出是从相同的元数据生成的。 唯一的区别是我们告诉MOXy使用分组元素作为JSON数组值的名称。

{'customer' : {'name' : 'Jane Doe','email-addresses' : [ 'jane.doe@example.com', 'jdoe@example.org' ]}
}

JAX-RS

您可以在JAX-RS环境中轻松地将MOXy用作JSON绑定提供程序(请参阅: MOXy作为您的JAX-RS JSON Provider – MOXyJsonProvider )。 您可以指定分组元素应作为与MOXyJsonProviderwrapperAsArrayName属性的JSON数组名。

package blog.json.collections;import java.util.*;
import javax.ws.rs.core.Application;
import org.eclipse.persistence.jaxb.rs.MOXyJsonProvider;public class CustomerApplication  extends Application {@Overridepublic Set<Class<?>> getClasses() {HashSet<Class<?>> set = new HashSet<Class<?>>(1);set.add(CustomerService.class);return set;}@Overridepublic Set<Object> getSingletons() {MOXyJsonProvider moxyJsonProvider = new MOXyJsonProvider();moxyJsonProvider.setWrapperAsArrayName(true);HashSet<Object> set = new HashSet<Object>(1);set.add(moxyJsonProvider);return set;}}

参考:在Java XML&JSON绑定博客上, JCG合作伙伴 Blaise Doughan的JSON和XML绑定处理 。

翻译自: https://www.javacodegeeks.com/2013/03/binding-to-json-xml-handling-collections.html

绑定到JSON和XML –处理集合相关推荐

  1. json绑定到实体_绑定到JSON和XML –处理集合

    json绑定到实体 EclipseLink JAXB(MOXy)的优势之一是能够使用单个元数据集将对象模型映射到JSON和XML. 一个弱点是您需要在JSON键或XML元素上折中集合属性. 我很高兴地 ...

  2. 快来看看Google出品的Protocol Buffer,别仅仅会用Json和XML了

    前言 习惯用 Json.XML 数据存储格式的你们,相信大多都没听过Protocol Buffer Protocol Buffer 事实上 是 Google出品的一种轻量 & 高效的结构化数据 ...

  3. SpringMVC 中整合JSON、XML视图一

    SpringMVC中整合了JSON.XML的视图,可以通过这些视图完成Java对象到XML.JSON的转换.转换XML提供了MarshallingView,开发者只需用注入相应的marshaller. ...

  4. JSON与XML的区别比较(非常全面)

    1.定义介绍 (1).XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允 ...

  5. springboot-springmvc响应json与xml原理-详解数据响应与内容协商(长文预警,收藏慢啃)

    目录 一.springmvc响应json 1. web场景自动引入了json场景 2.使用方式 二.springmvc响应json数据原理 1.springmvc请求处理逻辑 2.返回值的处理 3.返 ...

  6. 数据交换格式Json与XML

    什么是数据交换格式: 主流的有Json.XML.HTML. 数据交换格式的应用场景: 移动端(安卓,IOS)通讯方式采用http协议+Json格式的restful风格. 很多互联网公司都是用Http协 ...

  7. java json转xml_关于JSON与XML的区别比较

    现在互联网上,最流行的两大传输数据的标准就是json和XML了,关于谁是最好的,一直以来都是人们争论的话题,其实各有各的缺点和优点: 1.定义介绍 (1).XML定义 扩展标记语言 (Extensib ...

  8. json vs xml

    < DOCTYPE html PUBLIC -WCDTD XHTML TransitionalEN httpwwwworgTRxhtmlDTDxhtml-transitionaldtd> ...

  9. json c语言 数组转字符串数组中,json和字符串/数组/集合的互相转换の神操作总结...

    一:前端字符串转JSON的4种方式 1,eval方式解析,恐怕这是最早的解析方式了. function strToJson(str){ var json = eval('(' + str + ')') ...

最新文章

  1. OpenCV图像处理—— 凸包检测
  2. mybatis中使用XML配置文件方式实现CRUD模板流程
  3. 强化学习-Vanilla Policy Gradient(VPG)
  4. PREV-3_蓝桥杯_带分数
  5. php定时删除文件夹下文件(清理缓存文件)
  6. 老生常谈.优化linux内核参数
  7. 剑指Offer——不用加减乘除做加法
  8. UI素材|网站404页面有什么用处
  9. linux编译c 自动化,Linux江湖06:感悟GNU C以及将Vim打造成C/C++的半自动化IDE
  10. linux下网络包分析工具下载,Wireshark下载-网络封包分析工具 v3.2.6 官方版 - 下载吧...
  11. Oracle中的AWR,全称为Automatic Workload Repository
  12. 骗过70%的人!这个AI能自动给视频配音,真假难辨(不服来试)
  13. 源码编译安装keepalived
  14. 嵌入式软件设计第10次实验报告
  15. [再学Python] - 5 - 布尔操作符
  16. js基础知识汇总07
  17. egret性能优化总结
  18. Funcode拍飞虫 C语言
  19. C++实现屏幕截图(全屏截图)
  20. 易优EyouCMS全套插件使用说明

热门文章

  1. 阳泉2021高考成绩查询时间段,2021年阳泉高考成绩排名及成绩公布时间什么时候出来...
  2. browserquest php安装,请问一下browserquest-php项目换成GatewayWorker的形式需要怎么部署worker...
  3. apache shiro怎么升级_Springboot整合Shiro之授权
  4. repo-话说软件详细设计工具
  5. Spring MVC+layui(基于bootstrap)+t 新增功能(页面和数据传递)
  6. java中抽象类继承抽象类_用Java中的抽象类扩展抽象类
  7. lambda 匿名内部类_Lambda运行时内部:窥视无服务器巢穴
  8. jooq_jOOQ星期二:拉斐尔·温特豪德(Rafael Winterhalter)正在与字节好友合作字节码...
  9. Java中的责任链设计模式
  10. java 8 集合分组_Java 8:按集合分组