moxy json介绍_MOXy是GlassFish 4中新的默认JSON绑定提供程序

moxy json介绍

GlassFish 4现在可以提供完整的Java EE 7(JSR-342)平台。 EclipseLink为该发行版做出了一些重大贡献。 首先是提供JPA 2.1(JSR-338)实现。 我将在本文中介绍的第二个内容是EclipseLink MOXy,它现在是JAX-RS应用程序的默认JSON绑定提供程序。

RESTful服务

客户服务

通常,JPA将支持真实的服务来执行持久性操作(请参阅: 创建RESTful Web服务–第4/5部分 )。 但是对于这篇文章,我将使用“ Hello World”

样式服务,该服务基于ID作为XML和JSON返回一个Customer ,以说明有关绑定的一些要点。

package org.example.service;import javax.ejb.*;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import org.example.model.*;@Stateless
@LocalBean
@Path("/customers")
public class CustomerService {@GET@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})@Path("{id}")public Customer read(@PathParam("id") int id) {Customer customer = new Customer();customer.setId(id);customer.setName("Jane Doe");PhoneNumber pn = new PhoneNumber();pn.setType("work");pn.setValue("5551111");customer.getPhoneNumbers().add(pn);return customer;}}

客户申请

我使用了Application类来指定服务的路径。

package org.example.service;import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;@ApplicationPath("rest/*")
public class CustomerApplication  extends Application {}

Java模型

以下是我们用于此示例的Java模型。 目标是使用一组元数据生成良好的XML和JSON表示形式。

顾客

关于Customer类,有几点有趣的事情要注意。

  1. id属性是一个int 。 由于JSON具有不同的数字和文本表示方式,因此我们将研究如何在JSON输出中表示该值。
  2. phoneNumbers属性的类型为List <PhoneNumber> 。 已使用@XmlElementWrapper对其进行注释,以产生良好的XML输出。 我们将研究这样做对JSON输出的影响。
package org.example.model;import java.util.*;
import javax.xml.bind.annotation.*;@XmlRootElement
public class Customer {private int id;private String name;private List<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>();public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@XmlElementWrapper@XmlElement(name="phoneNumber")public List<PhoneNumber> getPhoneNumbers() {return phoneNumbers;}}

电话号码

在XML中, PhoneNumber类映射到具有简单内容的复杂类型(请参阅: JAXB和具有简单内容的复杂类型 )。 这意味着它将映射到具有属性和文本的XML元素。 这些XML概念并不直接与JSON概念相对应,因此我们将研究JSON表示形式。

package org.example.model;import javax.xml.bind.annotation.*;public class PhoneNumber {private String type;private String value;@XmlAttributepublic String getType() {return type;}public void setType(String type) {this.type = type;}@XmlValuepublic String getValue() {return value;}public void setValue(String value) {this.value = value;}}

使用服务

要求– GET

以下是我们用于访问服务的URL:

http://localhost:8080/CustomerResource/rest/customers/1

响应(应用程序/ xml)

由于我们将域模型映射为
JAXB(JSR-222)元数据下面的XML表示并不奇怪。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="1"><name>Jane Doe</name><phoneNumbers><phoneNumber type="work">5551111</phoneNumber></phoneNumbers>
</customer>

响应(应用程序/ json)– GlassFish 3.1.2

让我们看看在MOXy是默认的JSON绑定提供程序之前,GlassFish 3.1.2中的JSON表示是什么样的。 有几件事要注意:

  1. id属性的int值表示为JSON文本。
  2. 类型为List <PhoneNumber>phoneNumbers属性
    因为它只有一个项目被表示为JSON对象而不是JSON数组。 同样,即使此键包含一个集合,它仍称为phoneNumber
  3. 类型属性使用@XmlAttribute注释以来,与type属性相对应的JSON关键字以@ 开头
  4. 自从使用@XmlValue进行注释以来,与value属性对应的JSON密钥称为$
{"id": "1","name": "Jane Doe","phoneNumbers": {"phoneNumber": {"@type": "work","$": "5551111"}}
}

响应(应用程序/ json)– GlassFish 4

使用默认配置,您将看到升级到GlassFish 4消除了两个最大的问题:

  1. 数值–现在, id属性已作为数字值正确编组到JSON。 这不是技巧,MOXy将JSON表示形式基于属性的Java类型。 PhoneNumber实例上的String类型的value属性仅包含数字,并且已作为文本正确编组到JSON。
  2. 大小为1的集合–现在, phoneNumber键是一个JSON数组,不幸的是,它仍称为phoneNumber (我将在下一步演示如何解决此问题)。
{"id": 1,"name": "Jane Doe","phoneNumbers": {"phoneNumber": ["@type": "work","$": "5551111"]}
}

自定义JSON绑定

现在可以通过利用JAX-RS ContextResolver机制来配置MOXy。 您只需要返回MOXyJsonConfig的实例。 我们将使用它来执行以下操作:

  1. 指定我们不想为与@XmlAttribute映射的属性相对应的JSON关键字添加前缀。
  2. 使用JSON关键 ,而不是$@XmlValue映射属性。
  3. MOXyJsonConfig也可以用于将属性向下传递给Marshaller / Unmarshaller。 我们将执行此操作以清理集合属性的JSON密钥(请参阅: 绑定到JSON&XML –处理集合 )。
package org.example.service;import javax.ws.rs.ext.*;
import org.eclipse.persistence.jaxb.JAXBContextProperties;
import org.glassfish.jersey.moxy.json.MoxyJsonConfig;@Provider
public class MOXyJsonContextResolver implements ContextResolver<MoxyJsonConfig> {private final MoxyJsonConfig config;public MOXyJsonContextResolver() {config = new MoxyJsonConfig().setAttributePrefix("").setValueWrapper("value").property(JAXBContextProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);}@Overridepublic MoxyJsonConfig getContext(Class<?> objectType) {return config;}}

新回应

最后,我们有一个我们可以满意的JSON表示形式。 它不包含任何与XML相关的工件,即使它是使用与XML表示相同的元数据生成的(未更改)。 只需要一点点MOXy。

{"id": 1,"name": "Jane Doe","phoneNumbers": [{"type": "work","value": "5551111"}]
}

参考: MOXy是GlassFish 4中新的默认JSON绑定提供程序,来自我们的JCG合作伙伴 Blaise Doughan,来自Java XML&JSON Binding博客。

翻译自: https://www.javacodegeeks.com/2013/06/moxy-is-the-new-default-json-binding-provider-in-glassfish-4.html

moxy json介绍

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

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

相关文章

大学计算机科技论文格式,《中国科技论文在线》稿件格式

《中国科技论文在线》期刊以中国科技论文在线网站http://www.paper.edu.cn/ 为基础,对在线发表论文进行评审&#xff0c;将评选的优秀论文作为期刊的主要稿源。稿件格式如下&#xff1a;中文标题(20字以内)作者11&#xff0c;作者22&#xff0c;……(1. 学校 院系&#xff0c;城…

使用Spring Boot和React进行Bootiful开发

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 在过去的几年中&#xff0c;React受到了很多积极的报导&#xff0c;使其成为Java开发…

计算机图形学结课论文,计算机图形学结课论文精要.doc

计算机图形学结课论文精要2017届结课论文《计算机图形学基础教程》—小球的弹跳运动学生姓名学 号所属学院专 业 计算机科学与技术班 级塔里木大学教务处制目录摘 要11.背景11.1计算机图形学概述11.2计算机图形画面的分类22.OpenGL概述22.1程序的基本结构32.2状态机制43.方案论…

word计算机基础考试题及答案,计算机基础习题及答案题库(期末考试)-word资料(精).doc...

文档介绍&#xff1a;1. 计算机的诞生: 第一台电子计算机是 1946 年在美国诞生的,该机的英文缩写是。答案(A)ENIAC 2. 计算机的诞生: 第一台电子计算机诞生于______ 。答案(C) 美国 3. 计算机的诞生: 第一台电子计算机诞生于______ 。答案(C)1946 年 4. 计算机的诞生: 世界上公…

编译hotspot_从Hotspot JIT编译器打印生成的汇编代码

编译hotspot有时&#xff0c;在对Java应用程序进行性能分析时&#xff0c;有必要了解Hotspot JIT编译器生成的汇编代码。 这对于确定已做出的优化决策以及我们的代码更改如何影响生成的汇编代码非常有用。 在调试并发算法以确保已按预期应用可见性规则时&#xff0c;知道何时发…

计算机硬盘按不同接口,硬盘接口不同 速度差别竟然这么大

硬盘接口是硬盘与主机系统间的连接部件&#xff0c;作用是在硬盘缓存和主机内存之间传输数据。不同的硬盘接口决定着硬盘与计算机之间的连接速度&#xff0c;在整个系统中&#xff0c;硬盘接口的类型以及好坏都会直接影响程序运行快慢。说到硬盘接口我们常见的有SATA、PCI-E、M…

计算机导论设计实验,基于抽象知识点的《计算机导论》实验软件设计

Development of Experiment Software for《Computing Essentials》based on the Abstract Knowledge Points1、 College of Computer and Information Science, Southwest University, Chongqing, 400715Abstract&#xff1a;This paper develops an experiment software for 《…

使用Java的@Deprecated前瞻

我偶尔遇到一种情况&#xff0c;我需要引入新的API或构造以供其他人试用&#xff0c;但是我知道在使用某些API后&#xff0c;它可能会根据其他人的反馈而改变。 在这种情况下&#xff0c;我想以某种方式注释该构造&#xff0c;以警告其他开发人员此新添加的构造的暂定性。 在这…

计算机组成原理setb,计算机组成原理与汇编语言4

第四章指令系统指令系统概述指令系统是指某一种计算机所有指令的集合。对计算机而言&#xff0c;这是一组二进制数的输入&#xff0c;实际上是一组电平的输入。这些输入能在一个指令周期内产生人们预先规定的动作。显然这不是一组随机的二进制数据输入。指令系统是联系硬件和软…

计算机通信系统分哪两类,通信系统的组成(数字通信系统由哪几部分组成)

基本系统一般由信源(始发设备)、信宿(接收设备)和信道(传输介质)方式来自源的信息(语言、字符、图像或数据)由终端设备(如电话、电传打字机、传真机或数据终端设备等)转换成电信号。)在发送方&#xff0c;然后由始发设备编码、调制、放大或发送&#xff0c;然后基带信号被转换成…

nosql非关系型数据库_从Datomic出发,革命性的非NoSQL数据库

nosql非关系型数据库我终于设法了解了当今最不寻常的数据库之一&#xff0c;Datomic&#xff0c;并希望与您分享。 感谢Stuart Halloway和他的工作室&#xff01; 为什么&#xff1f;&#xff01;&#xff1f; 我们很快就会看到&#xff0c;Datomic与传统的RDBMS数据库以及各种…

你活在一个计算机模拟中吗,一麻省理工教授认为,我们更有可能生活在计算机模拟宇宙中...

一位麻省理工学院的教授表示&#xff0c;我们“更有可能”生活在某种模拟宇宙中&#xff0c;因为我们自己离能够创造超现实的模拟也不远了。(参见在接受解释性网站Vox采访时&#xff0c;计算机科学家Rizwan Virk认为&#xff0c;如果我们生活在信息世界而不是物质世界中&#x…

尽早查看针对Java 11的功能

随着JDK 10即将进入其发布候选阶段 &#xff0c;有趣的是&#xff0c;开始通过JDK 11观察之后会发生什么。 在撰写本文时&#xff0c;四个JEP &#xff08; JDK增强建议 &#xff09;已正式成为JDK 11的目标&#xff08;可能会出现&#xff09;。 这篇文章总结了当前针对JDK 11…

如何在命令行情重启计算机,如何应对“命令式”行情

如果说十月维稳行情&#xff0c;是以劝说&#xff0c;号召并佐以缓发新股为主要行政手段&#xff0c;那么十一月行情的主要特征就是“命令式”的。实践证明&#xff0c;十月行情并不咋地&#xff0c;虎头蛇尾&#xff0c;说明主力并不十分听话&#xff0c;也不卖力&#xff0c;…

服务器系统开机提示0xc000007b,0xc000007b蓝屏解决方法

0xc000007b是一种常见的蓝屏代码&#xff0c;导致出现此蓝屏代码的原因有很多&#xff0c;BIOS设置问题&#xff0c;驱动问题&#xff0c;硬件问题等等。硬件问题对于我们小白来说解决起来有点困难。我给大家带来了解决0xc000007b蓝屏软件问题的方法&#xff0c;赶紧来瞧瞧吧0x…

tms tck_记录合规性–关于TCK,规格和测试

tms tck使用软件规格非常困难。 不论在哪个地方提出&#xff1b; 您最终遇到了一个大问题&#xff1a;是否已实现所有指定的内容并对其进行了测试&#xff1f; 在瀑布驱动的方法学时代&#xff0c;这一直是一个问题&#xff0c;即使在撰写本文的今天&#xff0c;敏捷性和用户故…

3D环动画css3实现,CSS3 3D酷炫立方体变换动画的实现

我爱撸码&#xff0c;撸码使我感到快乐&#xff01;大家好&#xff0c;我是Counter&#xff0c;本章微博主要利用了CSS3的一些新特性&#xff0c;主要用到关键帧来使3D图形运动起来&#xff0c;涉及到了一些抽象的思想&#xff0c;立体的想象。先给大家看看完成的效果&#xff…

Spring项目的按层打包已过时

我认为Spring应用程序不应该以逐层方法构建。 在我看来&#xff0c;按功能打包更有意义。 首先&#xff0c;让我简要描述每种方法。 “按层打包”&#xff08;在非Java世界中为“按类型折叠”&#xff09; 该项目结构根据源代码文件所属的体系结构层将它们分为包/目录&#x…

css怎么控制两个字母,css英文字母数字自动换行且不断词方法

本文章来给各位同学介绍css怎样让英文字母数字自动换行且不断词方法总结&#xff0c;有需要了解的同学可进入参考。当一个定义了宽度的块状元素中填充的全部为纯英文或者纯数字的时候&#xff0c;在IE和FF中都会撑大容器&#xff0c;不会自动换行并且当数字或者英文中带有汉字时…

nmap 查看服务器版本信息,nmap命令-nmap命令扫描服务器信息的格式

用这条命令就可以扫描出目标网络的操作系统和开放端口号nmap-O...0/24上面的扫描信息直接输出到终端&#xff0c;如果想把结果写到文件里&#xff0c;可以用-oN&#xff0c;-oX选项输出到文本文件或xml文件。nmap-O...0/24-oXnmap_info.xml&#xff0c;结果会输出到XML文件&…