JAX-RS 2.0:自定义内容处理

我试图想到一个更好的标题,但未能拿出一个! 请多多包涵……。

JAX-RS 2.0规范允许我们无缝地将JAXB对象编组到HTTP请求/响应主体/从HTTP请求/响应主体中解组。 简而言之,我们可以使用域对象,而不必担心基于JAX-RS的解决方案中的低级XML序列化。

在开始之前, 这是指向下面引用的源代码的GitHub链接 –数量不多,但是以防万一,您需要窥视一下。

开发环境

  • Java EE 7(当然!)
  • JDK 8-不要激动,到目前为止还没有lambda!
  • Netbeans 8
  • Wildfly 8和GlassFish 4(是的,已经在两台服务器上都进行了测试)–它仅用于在Netbeans中切换服务器,并且花费大约15-30秒的黑白时间。 因此,这没什么大不了的!

首先,让我们看一下用例,这些用例演示了JAX-RS实现的开箱即用功能,以便通过网络处理带有JAXB注释的实体/域对象。

这是一个简单的示例,其中我们尝试“ 获取 ”域对象的表示,该对象恰好是JAXB 注释的 POJO

2

当我们触发GET HTTP请求时,将获得以下JSON响应 。 这里使用的工具是邮递员

1个

同样,也可以通过简单地切换“ 接受”来观察XML响应。   HTTP标头到application / xml

3

让我们看一下一种情况,其中我们尝试通过网络“ 发布 ”域对象(XML / JSON)的表示形式

4

通过邮递员启动POST请求

6

服务器日志中STDOUT的代码段(按照上面的代码)

5

因此,我们刚刚看到,在JAXRS中,装饰有JAXB批注的域对象可以在网上交换XML和JSON格式而不会费劲!

考虑一个场景,在该场景中我们已经可以使用丰富的域Java对象。 但

  • 我们无权访问源代码
  • 我们无法真正使用JAXB批注对其进行批注
  • 域实体是不兼容JAXB的旧式POJO。

在这里,我们可以利用JAX-RS 2.0中提供的自定义内容处理功能MessageBodyWriterMessageBodyReader接口为我们提供了一种插入自定义编组/解组机制的方式,并允许JAX-RS运行时处理其余工作!

  • 下面的示例主要处理XML和JSON格式,但是请注意,这些接口可用于“任何”数据格式-互联网上到处都是数百种,每天都有新的接口出现!

让我们看一些代码。 。 。 。 再次…..

首先,为了模拟get场景,让我们仅从JAXRS资源方法返回Legacy POJO的实例它与JAXB不兼容 /我们没有通过JAXB批注装饰它的源代码

7

您如何看待这将通过网络串行化为XML ? 我们对javax.ws.rs.ext.MessageBodyWriter接口的定制实现将有助于实现这一点。

此接口具有3个抽象方法,一个需要实现。 该片段展示了writeTo()方法,该方法包含大部分转换逻辑。

  • 您可以在Java EE 7 javadocs中进一步了解它

8

因此,和往常一样,我们要求邮递员为我们验证事情,这就是他不得不说的。 不用麻烦! 想象一下,如果直接从持久性(DB)存储中获取旧版POJO表示形式–您需要做的就是将其返回,因为在线表示形式已得到处理。

9

现在,相反的情况–从我们的客户端层发布 XML表示,并观察它被序列化到Legacy POJO实例中。 想坚持吗? 当然,继续执行并解雇实体管理器! (不要忘记@ javax.ejb.Stateless !)

101

您如何看待客户端发送XML有效负载通过网络转换为我们的Leagcy POJO 实例 ? 我们对javax.ws.rs.ext.MessageBodyReader接口的自定义实现将使这种情况发生。

13

呼叫Postman,通过网络发布 XML表示,然后查看结果

11

只是为了确保我们的旧版POJO确实已序列化– 通过服务器STDOUT日志进行了确认

12

因此,在一个简单的示例的帮助下,我们看到了在基于JAXRS的实现中定义用于处理自定义域对象/实体/ POJO的 自定义转换/类包装逻辑的简便性。

签字之前的几点观察

  • GlassFish4 中的 JAXRS实现不支持通过装饰有JAXB的POJO进行无缝JSON序列化/反序列化Wildfly 8的魅力十足 ! 荣誉!
  • 在将marshall / unmarshall流程委派给实体拦截器(读取器/写入器实现)后,无缝JSON支持停止工作(在GlassFish和Wildfly中均是如此)。 不知道为什么。 我猜想JAXRS实现是直接从/分别将有效负载取回/将有效负载写入到输入/输出流,并且某种程度上没有中间层可用于内容协商

我希望我不会在这里错过任何把戏! 如果您这样认为,请足够热情地通知我!

好吧,仅此而已! 编码愉快…………!

翻译自: https://www.javacodegeeks.com/2014/04/jax-rs-2-0-custom-content-handling.html

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

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

相关文章

这个夏天,感动我的歌,感动我的你

七里香 词:方文山 曲:周杰伦 JAY 窗外的麻雀 在电线杆上多嘴你说这一句 很有夏天的感觉手中的铅笔 在纸上来来回回我用几行字形容你是我的谁 秋刀鱼的滋味 猫跟你都想了解初恋的香味就这样被我们寻回那温暖的阳光 像刚摘的鲜艳草莓你说你…

构造函数模式

function student(props){this.nameprops.name || 匿名;//默认是匿名this.gradeprops.grade || 1;}student.prototype.hellofunction(){console.log(hello this.name);}function createStudent(props){return new student(props||{})}var xiaomingcreateStudent({name:xiaomin…

android 获取应用内存大小,如何在Android中获取当前内存使用量?

这取决于您要获得的内存查询的定义。通常,您想知道堆内存的状态,因为如果它占用了太多内存,您就会得到OOM并使应用程序崩溃。为此,您可以检查下一个值:final Runtime runtime Runtime.getRuntime();final long usedMe…

Waymo在美国推出自动驾驶汽车共享服务

导读经过数月的测试和数百万英里的无人驾驶汽车技术开发,Waymo 正式在美国推出了具有商业性质的自动驾驶汽车的共享服务。该公司的 Waymo One 项目将为客户提供 24 小时自动驾驶汽车服务。最初,这项服务将仅限于菲尼克斯周边城市,包括坦佩 (T…

2019春第一次课程设计实验报告

一、实验项目名称: 飞机游戏简化的编写 二、实验项目功能描述: 这个实验主要是实现游戏的正常运行,实现控制飞机的移动功能,增加其实用度, 同时还实现发射子弹和出现敌机的操作,利用函数封装重构飞机游戏&a…

区别和联系_动机与主题的区别与联系

今天我算是彻底弄明白了动机与主题的区别与联系(暴论)。当前些天我开始尝试写简单的奏鸣曲时,主题是什么,这个问题卡住了我,因为之前写的练习曲都是基于简单动机的。所以我求助于维基百科。主题是什么?参考…

Java 8中的新BigInteger方法

对JDK 8中的新功能的关注理所当然地主要集中在新的语言功能和语法上。 但是,对库和API进行了一些不错的添加,在本文中,我介绍了BigInteger类中添加的四个新方法: longValueExact() , intValueEx…

巴顿又吃回头草

巴顿是一名好车手,一个会给shumi以及kimi造成威胁的家伙,我并不在意他在哪个车队,只希望他跑得比kimi慢才好。from新浪:宛如平地一声雷,巴顿重返威廉姆斯的消息不仅让车迷感到错愕,英美车队的老板理查兹更是…

打印发现function toUpperCase() { [native code] }

var shello undefined s.toUpperCase function toUpperCase() { [native code] } s.toUpperCase() "HELLO" 咦 然后我就发现了 要是这本来是一个方法 然后你没有用一个方法的方式去调用,就会出现function toUpperCase() { [native code] } 类似于这一句 …

android 静态方法 构造方法,android基础-Java篇02:类和对象、构造方法、访问权限控制、重载、this关键字、static关键字...

一、类和构造方法(类和对象在百度百科已经有详细的介绍,这里只做简单的描述以及帮助理解;百度百科:类和对象,需要注意的是,百度百科类和对象的举例中都是C,书写格式不要和Java混淆!)什么是类&am…

『003』Shell命令

『001』索引-Linux Shell Command shell命令 《01》【线上查询及帮助】【001】-【001】 【001】- 点我快速打开文章【man】【help】【已改版】《02》【文件及目录操作】【002】-【008】 【002】- 点我快速打开文章【ls】【cd】【已改版】【003】- 点我快速打开文章【cp】【find…

尝试将WCF映射到Java术语

通过写这篇文章,我冒着被.NET和Java社区拒绝的巨大风险。 试图解释Java术语WCF (代表Windows Communication Foundation)是什么。 从WCF到Java的映射并不是很简单。 我缺乏对WFC使用者应该了解的与服务通信类型的了解:请求/响应或…

bootbox.js

bootbox:一个弹出框插件,官网看一下例子就好了:http://bootboxjs.com/examples.html 目前来说应该只要调用bootbox.js就可以了,没有css的问题 1.有最基本的调用就是 bootbox.alert("This is the default alert!"); 就什么都不做&…

android fragment界面滑动切换效果,Android App中使用ViewPager+Fragment实现滑动切换效果...

在android应用中,多屏滑动是一种很常见的风格,没有采用viewpager的代码实现会很长,如果采用ViewPager,代码就会短很多,但是使用ViewPager也有弊端:需要导入android-support-v4.jar、细节无法控制。不过现在…

相对路径./与../区别

一、基本概念 1、相对路径-顾名思义,相对路径就是相对于当前文件的路径。网页中一般表示路径使用这个方法。 2、绝对路径-绝对路径就是你的主页上的文件或目录在硬盘上真正的路径。绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,比如&#xff0…

nodejs进程异常退出处理方法

1. 捕获uncaughtException process.on(uncaughtException, function (err) {//打印出错误console.log(err);//打印出错误的调用栈方便调试console.log(err.stack); }); 2. 使用守护进程 例如:node-forever的守护和日志记录功能 安装非常容易 [sudo] npm …

关于Java的常见误解

Java是世界上使用最广泛的语言(需要引用),每个人对此都有自己的见解。 由于它是主流,所以通常会嘲笑它,有时是正确的,但有时批评只是不切合实际。 我将尝试解释我最喜欢的5个关于Java的误解。 Java速度很慢…

tomcat中间件的默认端口号_修改tomcat默认端口号8080

修改tomcat端口号端口修改tomcattomcat服务器的默认端口号是80801 只启动一个tomcat的情况当我们不想使用8080端口,需要修改为其他端口时,我们可以:1, 打开tomcat安装目录下的conf目录,找到server.xml文件。找到以下代码connectionTimeout&qu…

我们的爱

对白-什么感觉怎么样?-跟冷风一起-怎么了?-感觉好么?-怎么叫,好不好-时间过的快么?-带他的时候还真不快-呵呵-我想我不用再买月卡了-嘛?-没什么-恩?说-你考虑清楚吧-什么?-我说你俩早上论坛里灌的那么开心呢-.-呵呵-看样子,又要闹革命了-我很冷静-转载于:https://www.cn…

this指向问题

我今天下午本来想做个就是tr鼠标移出之后过三秒把对应的input添加hiddens类 然后我就这样写了 $(.table>tbody>tr).mouseout(function(){var index$(this).index();setTimeout(function(){console.log(index);console.log($(this));$(this).parents(.table).siblings(.c…