泽西岛/贾克斯RS:流式JSON

大约一年前,我写了一篇博客文章,展示了如何使用Jersey / Jax RS流式传输HTTP响应 ,最近我想做同样的事情,但是这次使用JSON。

一种常见的模式是获取我们的Java对象并获​​取该对象的JSON字符串表示形式,但这并不是最有效的内存使用方式,因为我们现在有了Java对象和一个字符串表示形式。

如果我们需要在响应中返回大量数据,则这尤其成问题。

通过编写更多代码,我们可以在部分准备就绪后立即将响应发送到客户端,而不是构建整个结果并一次性发送所有结果:

@Path("/resource")
public class MadeUpResource
{private final ObjectMapper objectMapper;public MadeUpResource() {objectMapper = new ObjectMapper();}@GET@Produces(MediaType.APPLICATION_JSON)public Response loadHierarchy(@PathParam( "pkPerson" ) String pkPerson) {final Map<Integer, String> people  = new HashMap<>();people.put(1, "Michael");people.put(2, "Mark");StreamingOutput stream = new StreamingOutput() {@Overridepublic void write(OutputStream os) throws IOException, WebApplicationException{JsonGenerator jg = objectMapper.getJsonFactory().createJsonGenerator( os, JsonEncoding.UTF8 );jg.writeStartArray();for ( Map.Entry<Integer, String> person : people.entrySet()  ){jg.writeStartObject();jg.writeFieldName( "id" );jg.writeString( person.getKey().toString() );jg.writeFieldName( "name" );jg.writeString( person.getValue() );jg.writeEndObject();}jg.writeEndArray();jg.flush();jg.close();}};return Response.ok().entity( stream ).type( MediaType.APPLICATION_JSON ).build()    ;}
}

如果运行此输出,我们将看到:

[{"id":"1","name":"Michael"},{"id":"2","name":"Mark"}]

这是一个简单的示例,但希望可以很容易地看到如果我们想流式传输更复杂的数据时可以如何翻译它。

翻译自: https://www.javacodegeeks.com/2014/04/jerseyjax-rs-streaming-json.html

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

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

相关文章

计算机在盲童音乐教学中的具体应用,计算机在高校中的具体应用

计算机在高校中的具体应用随着信息时代的到来,计算机已经成为了高校中不可缺少的重要资源,因此,在计算机日益普及的今天,对于如何利用计算机来提高教学效果,丰富(本文共3页)阅读全文>>随着计算机网络技术和信息技术的不断发展,人们对信息与知识的需求与日俱...(本文共2页…

python selenium 判断元素是否可见

#在元素定位二次封装的基础上&#xff0c;封装判断元素是否可见&#xff0c;找到元素时返回True&#xff0c;找不到元素的时候抛出异常&#xff0c;返回Falsedef isElementPresent(self,locate_type,value): try: self.findElement(locate_type,value) return T…

获取cxgrid footer内容

cxGridDBTableView1.DataController.Summary.FooterSummaryValues[4];转载于:https://www.cnblogs.com/Thenext/p/10235711.html

国外免费全文网站

国外免费全文网站  1.The NASA Astrophysics Data System -- 世界最大免费全文网站&#xff0c;超过300,000篇全文 主要学科&#xff1a;天体物理学 2.HighWire Press -- 世界第二大免费全文网站&#xff0c;超过235&#xff0c;812篇全文 主要学科&#xff1a;生物学、…

python 怎么算l2范数_数学推导+纯Python实现机器学习算法13:Lasso回归

版权说明&#xff1a;本公号转载文章旨在学习交流&#xff0c;不用于任何商业用途&#xff0c;版权归原作者所有&#xff0c;如有异议&#xff0c;敬请后台联络我们&#xff0c;议定合作或删除&#xff0c;我们将第一时间按版权法规定妥善处理&#xff0c;非常感谢&#xff01;…

山东理工大学计算机学院学号,计算机组成原理课程设计--山东理工大学计算机学院...

《计算机组成原理课程设计--山东理工大学计算机学院》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《计算机组成原理课程设计--山东理工大学计算机学院(14页珍藏版)》请在人人文库网上搜索。1、山东理工大学计算机学院课 程 设 计计算机组成原理班 级 姓 名 学 号 指…

Java 8快多少?

Java SE 8已于昨天发布 。 传统上&#xff0c;每个新的主要JRE版本都提供免费的性能提升。 我们还能再得到免费的午餐吗&#xff1f; 这次收益有多大&#xff1f; 让我们对其进行基准测试。 基准方法 使用3个不同的JRE版本&#xff08;SunJDK 1.6.0_26 &#xff0c;OpenJDK 1…

Win10 OpenCV3.3.0+VS2013配置大坑,OpenCV解决方案编译报错“找不到python36_d.lib”错误...

今天因为想要用OpenCV做图像识别&#xff0c;小白一个&#xff0c;在网上找到一个教程&#xff0c;但是需要配置OpenCV3.3.0的环境&#xff0c;于是又在网上找OpenCV3.3.0VS2013&#xff08;因为我之前已经安过了VS2013&#xff09;&#xff0c;前面的都顺利执行&#xff0c;但…

正在编写推箱子游戏的自动求解程序

网上搜索了一下&#xff0c;有好多人现成的产品&#xff0c;不少国产的。编写这个程序只是为了回忆一下算法。不能丢了。 自动求解有俩种方案&#xff1a;一个是求最小行走步骤&#xff0c;一个是求最小推箱子数目。 第一种算法简单些&#xff0c;只要将小人推动的四个方向进行…

JS面向对象编程

什么是面向对象编程&#xff08;OOP&#xff09;&#xff1f;用对象的思想去写代码&#xff0c;就是面向对象编程。 面向对象编程的特点 抽象&#xff1a;抓住核心问题封装&#xff1a;只能通过对象来访问方法继承&#xff1a;从已有对象上继承出新的对象多态&#xff1a;多对…

mvp的全称_是让人提神醒脑的 MVP、MVVM 关系精讲!

前言很高兴见到你&#xff01;我是《Jetpack MVVM 精讲》的独立原创作者 KunMinX&#xff0c;GitHub star 8.7k&#xff0c;专注于深度思考和 Jetpack MVVM 的分享。关于 MVP 和 MVVM 本质和区别的文章&#xff0c;本来我是不想写的&#xff0c;因为经过长达一年的耳濡目染 和对…

启航考研计算机课程,计算机考研专业课如何备考

计算机考研科目多&#xff0c;任务重&#xff0c;我们应该如何在有限的时间里更高效的复习&#xff0c;看一下天任启航考研为大家总结的复习计划吧!1、有计划&#xff0c;重基础计算机学科专业基础综合考试涵盖数据结构、计算机组成原理、操作系统和计算机网络基础等学科专业基…

IntelliJ中的实时模板

如上所述这里 &#xff0c;的IntelliJ的现场模板可以让你轻松地插入预定义的代码片段到你的源代码。 我在下面发布了一些我最常用的模板&#xff0c;到GitHub上模板文件完整列表的链接&#xff08;作为我设置新IntelliJ环境时的参考&#xff09;以及将IntelliJ设置文件添加到G…

链家广州二手房的数据与分析——爬取数据

之前在博客分享了利用 R 和 rvest 包爬虫的基础方法。现在就来实战一下&#xff1a;爬取链家网广州 40,000 套二手房的数据。 之前在 Web Scraping with R 说过的爬虫方法在这篇中就不在赘述了。这里就分享怎么样爬取网站中翻页的数据。 >> Web Scraping across Multiple…

Vue脚手架搭建项目

全局安装vue脚手架 $ npm install -g vue-cli 卸载方法 $ npm uninstall -g vue-cli 查看vue版本&#xff08;注意&#xff1a;大写的V&#xff09; $ vue -V 创建项目 $ vue init webpack vue-app ? Project name vue-app ? Project description Vue Project ? Author Pr…

es安全组端口_从零开始在远程服务器(Linux)上搭建es,eshead和ik分词器

一、资源准备远程服务器一个&#xff08;本教程为CentOS 64位&#xff09;注&#xff1a;ik分词器版本需与es版本统一jdk1.8.0elasticsearch-head-master.zip二、开放端口注&#xff1a;本例采用的是阿里云服务器1.登录阿里云&#xff0c;选择控制台2.找到左上角的三条白线--》…

sipp模拟freeswitch分机测试(SIP协议调试)

1、freeswitch安装 1) 网上很多安装方法都不靠谱&#xff0c;系统版本&#xff0c;各种依赖库一堆问题&#xff0c;下面是验证的可行的。 yum install -y http://files.freeswitch.org/freeswitch-release-1-6.noarch.rpm epel-releaseyum install -y freeswitch-config-vanill…

hd计算机技术,BD和HD的区别是什么?

BD和HD的区别是什么?我们在网上下载电影的时候&#xff0c;往往发帖子的童鞋会提示我们影片的规格&#xff0c;如所谓BD1280或者HD1024等等&#xff0c;一些朋友搞不清楚这是什么意思&#xff0c;实际上我们只能说BD和HD的区别是什么&#xff0c;关于1280和1024那完全是分辨率…

Java比以往任何时候都摇滚

在TIOBE索引上 &#xff0c;Java和C长期以来一直排名第一和第二&#xff0c;并且随着最近发布的JDK 8 GA的发布&#xff0c;对于我们的社区来说&#xff0c;情况不会变得更糟。 Java简直就是岩石&#xff01; 它是构建几乎所有应用程序的最佳平台。 但是&#xff0c;为什么Ja…

滚动条判断是否滑动到顶部底部

/*** [滚动条]*/$(window).scroll(function() {var scrollTop $(this).scrollTop(); // 滚动条距离顶部的高度console.log("滚动条距离顶部的高度-->" scrollTop);var scrollHeight $(document).height(); // 当前页面的总高度console.log("当前页面的总…