moxy json介绍_MOXy的对象图– XML和JSON的输入/输出局部模型

moxy json介绍

假设您有一个要公开为RESTful服务的域模型。 问题是您只想输入/输出部分数据。 以前,您将创建一个代表子集的单独模型,然后使用代码在模型之间移动数据。 在EclipseLink 2.5.0中,我们有一个称为“对象图”的新功能,使您可以轻松地在模型上定义局部视图。

您可以从2013年3月24日开始从每晚下载EclipseLink 2.5.0每晚下载,以尝试使用此功能:

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

Java模型

以下是我们将用于此示例的Java模型。 该模型表示客户数据。 我们将使用对象图输出仅足够的信息,以便有人可以通过电话与客户联系。

顾客

@XmlNamedObjectGraph扩展用于指定我们希望编组/解组的模型的子集。 通过指定一个或多个@XmlNamedAttributeNode批注来完成。 如果要将对象图应用于属性,则可以为其指定子图。 可以将子图定义为目标类上的@XmlNamedSubgraph@XmlNamedObjectGraph

package blog.objectgraphs.metadata;import java.util.List;
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.*;@XmlNamedObjectGraph(name='contact info',attributeNodes={@XmlNamedAttributeNode('name'),@XmlNamedAttributeNode(value='billingAddress', subgraph='location'),@XmlNamedAttributeNode(value='phoneNumbers', subgraph='simple')},subgraphs={@XmlNamedSubgraph(name='location',attributeNodes = { @XmlNamedAttributeNode('city'),@XmlNamedAttributeNode('province')})}
)
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {@XmlAttributeprivate int id;private String name;private Address billingAddress;private Address shippingAddress;@XmlElementWrapper@XmlElement(name='phoneNumber')private List<PhoneNumber> phoneNumbers;}

地址

因为我们将Address类的对象图定义为Customer类的子图,所以在这里我们不需要做任何事情。

package blog.objectgraphs.metadata;import javax.xml.bind.annotation.*;@XmlAccessorType(XmlAccessType.FIELD)
public class Address {private String street;private String city;private String province;private String postalCode;}

电话号码

对于Customer类上的phoneNumbers属性,我们指定应使用一个名为simple的对象图来限定数据范围。 我们将在PhoneNumber类上定义此对象图。 这种方法的优点是它使对象图更易于重用。

package blog.objectgraphs.metadata;import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.*;@XmlNamedObjectGraph(name='simple',attributeNodes={@XmlNamedAttributeNode('value'),}
)
@XmlAccessorType(XmlAccessType.FIELD)
public class PhoneNumber {@XmlAttributeprivate String type;@XmlValueprivate String value;}

示范代码

演示版

在下面的演示代码中,我们将阅读一个XML文档以完全填充我们的Java模型。 在将其编组起来以证明所有内容都已完全映射之后,我们将在封送拆收器上指定一个对象图(第22行),并将子集输出到XML和JSON。

package blog.objectgraphs.metadata;import java.io.File;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.MarshallerProperties;public class Demo {public static void main(String[] args) throws Exception {JAXBContext jc = JAXBContext.newInstance(Customer.class);Unmarshaller unmarshaller = jc.createUnmarshaller();File xml = new File('src/blog/objectgraphs/metadata/input.xml');Customer customer = (Customer) unmarshaller.unmarshal(xml);// Output XMLMarshaller marshaller = jc.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.marshal(customer, System.out);// Output XML - Based on Object Graphmarshaller.setProperty(MarshallerProperties.OBJECT_GRAPH, 'contact info');marshaller.marshal(customer, System.out);// Output JSON - Based on Object Graphmarshaller.setProperty(MarshallerProperties.MEDIA_TYPE, 'application/json');marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);marshaller.marshal(customer, System.out);}}

input.xml /输出

我们将使用以下文档来填充我们的域模型。 我们还将撤回封送它,以证明所有内容均已实际映射。

<?xml version='1.0' encoding='UTF-8'?>
<customer id='123'><name>Jane Doe</name><billingAddress><street>1 A Street</street><city>Any Town</city><province>Ontario</province><postalCode>A1B 2C3</postalCode></billingAddress><shippingAddress><street>2 B Road</street><city>Another Place</city><province>Quebec</province><postalCode>X7Y 8Z9</postalCode></shippingAddress><phoneNumbers><phoneNumber type='work'>555-1111</phoneNumber><phoneNumber type='home'>555-2222</phoneNumber></phoneNumbers>
</customer>

基于对象图的XML输出

下面的XML由与上一个XML文档完全相同的模型生成。 不同之处在于,我们利用命名对象图来选择映射内容的子集。

<?xml version='1.0' encoding='UTF-8'?>
<customer><name>Jane Doe</name><billingAddress><city>Any Town</city><province>Ontario</province></billingAddress><phoneNumbers><phoneNumber>555-1111</phoneNumber><phoneNumber>555-2222</phoneNumber></phoneNumbers>
</customer>

基于对象图的JSON输出

以下是与以JSON表示的先前XML文档相同的子集。 我们已经使用了新的
JSON_WRAPPER_AS_ARRAY_NAME属性(请参阅绑定到JSON&XML –处理集合 )以改善集合值的表示形式。

{'name' : 'Jane Doe','billingAddress' : {'city' : 'Any Town','province' : 'Ontario'},'phoneNumbers' : [ '555-1111', '555-2222' ]
}

外部元数据

MOXy还提供了一个外部绑定文档,使您可以为第三方对象提供元数据或为模型应用备用映射(请参阅:将对象映射到多个XML模式–天气示例 )。 以下是此示例的映射文档。

<?xml version='1.0'?>
<xml-bindings xmlns='http://www.eclipse.org/eclipselink/xsds/persistence/oxm'package-name='blog.objectgraphs.metadata'xml-accessor-type='FIELD'><java-types><java-type name='Customer'><xml-named-object-graphs><xml-named-object-graph name='contact info'><xml-named-attribute-node name='name'/><xml-named-attribute-node name='billingAddress' subgraph='location'/><xml-named-attribute-node name='phoneNumbers' subgraph='simple'/><xml-named-subgraph name='location'><xml-named-attribute-node name='city'/><xml-named-attribute-node name='province'/></xml-named-subgraph></xml-named-object-graph></xml-named-object-graphs><xml-root-element/><java-attributes><xml-attribute java-attribute='id'/><xml-element java-attribute='phoneNumbers' name='phoneNumber'><xml-element-wrapper/></xml-element></java-attributes></java-type><java-type name='PhoneNumber'><xml-named-object-graphs><xml-named-object-graph name='simple'><xml-named-attribute-node name='value'/></xml-named-object-graph></xml-named-object-graphs><java-attributes><xml-attribute java-attribute='type'/><xml-value java-attribute='value'/></java-attributes></java-type></java-types>
</xml-bindings>

参考:来自Java的 JCG合作伙伴 Blaise Doughan的MOXy的对象图– XML和JSON的输入/输出局部模型,位于Java XML&JSON绑定博客中。

翻译自: https://www.javacodegeeks.com/2013/03/moxys-object-graphs-inputoutput-partial-models-to-xml-json.html

moxy json介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348923.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux设置新硬盘权限,Linux 下挂载新硬盘以及更改为普通权限

1、启动终端&#xff0c;以root用户登录2、查看硬盘信息&#xff1a;#fdisk -l3、进入磁盘&#xff0c;对磁盘进行分区&#xff1a;#fdisk /dev/sda(注意看你要挂载哪一个磁盘&#xff0c;我的是sda&#xff0c;有的是sdb)4、格式化分区&#xff1a;#mkfs.ext3 /dev/sda1 //注&…

使用Payara Micro的Easy Java EE Microservices

想知道如何开始使用Java EE Microservices&#xff1f; 使用Java EE API只需很少的步骤即可部署微服务。 许多人认为Java EE无法与微服务一起使用&#xff0c;但事实并非如此……特别是如果您仅使用服务所需的Java EE规范。 在这篇简短的文章中&#xff0c;我将演示如何使用Jav…

linux终端lex程序运行,lex的简单使用

Lex & Flex 简介Lex是lexical compiler的缩写&#xff0c;是Unix环境下非常著名的工具&#xff0c; Lex (最早是埃里克施密特和 Mike Lesk 制作)是许多 UNIX 系统的标准词法分析器(lexical analyzer)产生程式&#xff0c;而且这个工具所作的行为被详列为 POSIX 标准的一部分…

Linux内存page,Linux虚拟内存管理 - Page Table的作用

虚拟内存的作用&#xff1a;1.扩展实际有限的物理内存&#xff0c;当然这种扩展是虚拟的&#xff0c;比如物理内存512M&#xff0c;对于一个需要1G空间的进程来说&#xff0c;照样可以运行。这增加了操作系统是应用范围。2.使得进程中的数据空间增大&#xff0c;增大到多少与硬…

entitymanager_实体管理器的类型:应用程序管理的EntityManager

entitymanagerJPA规范定义了几种类型的EntityManagers / Persistence Context。 我们可以有&#xff1a; 扩展和事务范围的EntityManager&#xff0c; 容器管理或应用程序管理的EntityManager。 JTA或本地资源EntityManager&#xff0c; 除了上述区别之外&#xff0c;我们还…

linux安装无法添加挂载,linux-无法在已挂载/ etc / passwd和/ etc / shadow的docker容器中添加新用户...

问题示例&#xff1a;docker run -ti -v my_passwd:/etc/passwd -v my_shadow:/etc/shadow --rm centos[root681a5489f3b0 /]# useradd test # does not work !?useradd: failure while writing changes to /etc/passwd[root681a5489f3b0 /]# ll /etc/passwd /etc/shadow # pe…

CDI中的事务异常处理

在Java EE中&#xff0c;在执行事务性业务方法期间引发的异常导致事务回滚。 但是&#xff0c;只有系统异常&#xff08;即运行时异常&#xff09;才是这种情况&#xff0c;该方法异常未在方法签名中声明。 对于应用程序异常&#xff08;即检查的异常&#xff09;或任何带Appl…

openoffice+linux+jodconverter+乱码,OpenOffice安装和转换乱码解决方案

前言&#xff1a;OpenOffice项目中用途&#xff1a;word转换pdfWindows安装、转换&#xff1a;安装包下载后一路OK就可以正常安装&#xff0c;转换没有问题Linux安装、转换&#xff1a;安装有分DEB包和RPM包&#xff0c;下面会说明各自安装方法在en_US.UTF-8 系统环境下会出现乱…

linux常用操作符,Shell常用操作符总结

一、算术操作 - * / %二、关系操作> < ! && ||三、测试操作测试命令 : test [ ] [[ ]] (( ))1、测试文件状态-d 目录-b 块设备-s 文件长度 > 0、非空-f 正规文件-w 可写-L 符号连接-u 文件有 suid 位设置-r 可读…

junit 参数化测试用例_JUnit:在参数化测试中命名单个测试用例

junit 参数化测试用例几年前&#xff0c;我写了有关JUnit参数化测试的文章 。 我不喜欢它们的一件事是JUnit使用数字命名了单个测试用例&#xff0c;因此&#xff0c;如果它们失败&#xff0c;您将不知道是哪个测试参数导致了失败。 以下Eclipse屏幕快照将向您展示我的意思&…

华硕台式机安装linux进不去系统,[已解决]求助,无法进入系统

之前一直用arch系统盘&#xff0c;Windows系统盘是在另一台电脑上的&#xff0c;我另外一台电脑昨天摔了&#xff0c;我还以为是硬盘坏了&#xff0c;把这块windows硬盘换到这台华硕主板的电脑&#xff0c;发现硬盘没坏。我于是把windows硬盘从机箱拿出来&#xff0c;现在碰到了…

处理JAX-RS中的自定义异常类型

JAX-RS支持处理自定义异常&#xff08;以EJB或CID Bean形式抛出&#xff09;以处理自定义HTTP响应。 假设我们有一个“异常” EJB&#xff1a; Stateless public class Hello {public String greeting() {if (new Random().nextBoolean())throw new GreetingException("…

MX250和第三方Linux版区别,MX250和MX350哪个好一点,区别和差距在哪里?求推荐?_科技数码通...

MX350系列显卡使笔记本颜值变得更高&#xff0c;性能更强&#xff0c;更轻便&#xff0c;在轻便笔记本需求变得越来越大&#xff0c;但性能也要求越来越高&#xff0c;特别是在图像处理方面&#xff0c;这个时候MX系列的显卡便应运而生&#xff0c;其拥有者超低的功耗&#xff…

linux r包默认安装位置,R-Language(R语言或称r-project)的安装

1、R语言的简介R语言(r-project)是主要用于统计分析、绘图的语言和操作环境。2、配置yum源2.1、安装说明由于编译安装相对繁琐&#xff0c;故而安装使用repoforge的源解决&#xff0c;免去编译的麻烦。注意&#xff1a;请根据实际的系统OS版本选取合适的YUM源。2.3、rpmforge源…

aws s3 命令行_通过命令行界面使用AWS ElasticMapReduce

aws s3 命令行在本文中&#xff0c;我将通过使用EMR的CLI使用AWS MapReduce服务&#xff08;称为ElasticMapReduce &#xff09;。 使用EMR的过程可以大致分为三个步骤&#xff1a; 设置并填充S3存储桶 创建并运行EMR作业 从S3存储桶中获取结果 在开始这三个高级步骤之前&…

在5分钟内将Spring Boot作为Windows服务启动

最近&#xff0c;我不得不将Spring Boot应用程序部署为Windows服务&#xff0c;并且对使用winsw如此容易感到惊讶。 我之前曾写过关于使用procrun – Java程序作为Windows服务的文章 &#xff0c;但是winsw更加容易 入门 Spring Boot文档的第59节是有关安装Spring Boot应用程序…

linux下用c语言打印hellword,用C语言写一个Helloworld_实现第一步编译运行

asp&period;net在线预览txt文件&lpar;简单实现&rpar;最近在做文件的在线预览,发现txt文件没有一个较好的方法去实现,想了想可能是比较简单就直接在后台输出了 txt文件Windows 环境下基于 Redis 的 Celery 任务调度模块的实现搭建环境: Windows-x64 10 Celery 3.1.2…

c语言自动计算时间,C语言 · 计算时间

【工业串口和网络软件通讯平台&lpar;SuperIO&rpar;教程】四&period;开发设备驱动SuperIO相关资料下载:http://pan.baidu.com/s/1pJ7lZWf 1.1 开发准备 把“开发包”内的所有文件复制到项目的“bin”目录下,或项目下的专用生成目录.开发包 ...java compiler leve…

matchers依赖_Hamcrest Matchers,Guava谓词和Builder设计模式

matchers依赖通常&#xff0c;在编码时&#xff0c;我们必须处理其中包含数十个字段的一些POJO对象。 很多时候&#xff0c;我们通过一个带有数十个参数的构造函数来初始化这些类&#xff0c;这以任何可能的想象的方式都是可怕的。 除此之外&#xff0c;使用这些构造函数的函数…

8255编程c语言程序,51单片机8255驱动C程序

/*----------------------------------------------------------------------------------------------------------------库文件名称&#xff1a;driver8155.h功能描述&#xff1a;驱动8155&#xff0c;不需要了解8255的工作原理&#xff0c;透明操作8255的三个输入输出口PA、…